在mongoose中返回对象数组的子节点

时间:2016-10-13 16:03:05

标签: mongodb mongoose mongoose-schema

我想从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"
} 

但为什么我不能得到这个?

1 个答案:

答案 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")
    }
}