【问题标题】:MongoDb, find specific objects, nested values matching specific valueMongoDb,查找特定对象,匹配特定值的嵌套值
【发布时间】:2016-10-05 22:43:34
【问题描述】:

db.Rooms.find({"name" : "room3"}).pretty()
{
        "_id" : ObjectId("57f50608ace5ceb9af033528"),
        "name" : "room3",
        "userData" : {
                "user" : ObjectId("57f4d142ace5ceb9af033521"),
                "date" : "Wed Oct 05 2016 15:54:16 GMT+0200"
        },
        "active" : true,
        "users" : [
                {
                        "uid" : ObjectId("57f383a6ace5ceb9af033511")
                },
                {
                        "uid" : ObjectId("57f4d142ace5ceb9af033521")
                }
        ],
        "messages" : [
                {
                        "msg" : "first test since statement ",
                        "time" : "Wed Oct 05 2016 15:55:26 GMT+0200",
                        "user" : ObjectId("57f383a6ace5ceb9af033511")
                },
                {
                        "msg" : "second test since statement ",
                        "time" : "Wed Oct 05 2016 15:57:35 GMT+0200",
                        "user" : ObjectId("57f4d142ace5ceb9af033521")
                },
                {
                        "msg" : "third test since statement ",
                        "time" : "Wed Oct 05 2016 15:58:11 GMT+0200",
                        "user" : ObjectId("57f383a6ace5ceb9af033511")
                }
        ]
}

我对 Mongo 很陌生,但我无法解决这个问题。实际上我已经自己尝试了半天了:(

我想要的是找到“仅”某个用户插入的消息..

这是我的收藏。

(如果看起来很乱,我会链接到图片) image as link

我想展示的是: 来自“用户”的所有“味精”,带有 _id : ObjectId("57f383a6ace5ceb9af033511")

我希望有人可以指导我,甚至告诉我这个收藏是坏的还是什么..

谢谢 ;)

【问题讨论】:

  • 你能分享你尝试访问味精的代码吗?

标签: node.js mongodb nested-queries


【解决方案1】:

之前问过的类似问题

How to filter array in subdocument with MongoDB

关于使用聚合函数的问题

db.Room.aggregate(
    { $unwind: '$messages'},
    { $match: {'messages.user': {$eq: ObjectId("57f383a6ace5ceb9af033511")}}},
    { $group: {_id: '$_id', list: {$push: '$messages.msg'}}}

结果:

{
    "_id" : ObjectId("57f50608ace5ceb9af033528"),
    "list" : [ 
        "first test since statement ", 
        "third test since statement "
    ]
}

【讨论】:

  • 谢谢你的回答..它做到了我想要的:)你是时间的救星:P
【解决方案2】:

关于这个话题还有一个问题:

How to select a single field in MongoDB?

在 find 方法中,您可以传递另一个对象(查询除外),该对象告诉要返回哪些字段。

对你来说,它看起来像这样:

db.student.find({"_id" : ObjectId("57f50608ace5ceb9af033528")}, {messages:1})

1 in {messages:1} = 选择“消息”字段。

【讨论】:

    猜你喜欢
    • 2017-08-02
    • 1970-01-01
    • 2021-08-26
    • 2019-07-18
    • 2018-08-08
    • 2020-02-16
    • 1970-01-01
    • 2020-12-20
    • 2019-10-05
    相关资源
    最近更新 更多