【问题标题】:Return child of object array in mongoose在猫鼬中返回对象数组的孩子
【发布时间】:2021-06-06 14:34:48
【问题描述】:

我想从 mongoose/mongodb 中的对象数组中返回匹配的对象,但我似乎做错了。

我的架构目前如下所示:

items: {
    left: { type: Number, default: 0 },
    total: { type: Number, default: 0 },
    each: [{
        name: String
    }]
}

这使得each 中的每个对象都获得了自己的对象ID。现在我想用猫鼬来查询这个,我试过$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"
} 

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

【问题讨论】:

  • 你检查过req.params.id是一个objectid还是一个字符串?您确定each 对象已正确保存在数据库中吗?

标签: mongodb mongoose mongoose-schema


【解决方案1】:

用途:

db.getCollection('projects').findOne({"items.each._id" : 
ObjectId("57ffc4396270adff8b273f72")},{"items.each.$":1})

输出:

{
    "_id" : ObjectId("57ffc4396270adff8b273f71"),
    "items" : {
        "each" : [ 
            {
                "name" : "sdfsd",
                "_id" : ObjectId("57ffc4396270adff8b273f72")
            }
        ]
    }
}

或者:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2020-11-24
    • 2015-12-28
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多