我想从mongoose / mongodb中的一个对象数组中返回匹配的对象,但我似乎无法正确使用它。
我的架构目前看起来像这样:
items: {
left: { type: Number, default: 0 },
total: { type: Number, default: 0 },
each: [{
name: String
}]
}
这使得each
中的每个对象都可以获得自己的对象ID。现在我想用mongoose查询,我已经尝试了$in
和$elemMatch
以及普通.find({ items.each._id: req.params.id })
。
更具体
Project.findOne({ 'items.each': { $elemMatch: { _id: req.params.id } } }).exec()
我想要返回一个这样的对象:
{
_id: ObjectId(23426456234),
name: "My name is"
}
但为什么我不能得到这个?
答案 0 :(得分:0)
使用:
db.getCollection('projects').findOne({"items.each._id" :
ObjectId("57ffc4396270adff8b273f72")},{"items.each.$":1})
输出:
{
"_id" : ObjectId("57ffc4396270adff8b273f71"),
"items" : {
"each" : [
{
"name" : "sdfsd",
"_id" : ObjectId("57ffc4396270adff8b273f72")
}
]
}
}
OR:
db.getCollection('projects').aggregate(
{$unwind: "$items.each"},
{$match:{"items.each._id" : ObjectId("57ffc4396270adff8b273f72")}},
{$project:{_id: 0, each: "$items.each"}}
)
输出:
{
"each" : {
"name" : "sdfsd",
"_id" : ObjectId("57ffc4396270adff8b273f72")
}
}