仅检索mongodb中的子文档的一部分

时间:2013-09-05 02:11:22

标签: mongodb

我有一些看起来像这样的数据:

{
"_id" : "5227aa5d9881d31cd3aa0e78",
"Message" : "This is a message 5:47 PM",
"IssuedAt" : ISODate("2013-09-04T21:47:09.932Z"),
"Users" : [
    {
        "_id" : "dhBHuZL9M+hqtKIx14iu",
        "IsRead" : true
    },
    {
        "_id" : "SOMSOMOMODJFJDFKJKDJF",
        "IsRead" : false
    }
]
}

我希望检索以下关于一个用户:

{
  "_id" : "5227aa5d9881d31cd3aa0e78",
  "Message" : "This is a message 5:47 PM",
  "IssuedAt" : ISODate("2013-09-04T21:47:09.932Z"),
  "IsRead" : false
}

我尝试了这个,但它只返回整个子文档的记录:

db.collection.find({"Users": {$elemMatch: {"_id": 'dhBHuZL9M+hqtKIx14iu'}}}, {"Message": 1, "Users.$.IsRead": 1}).pretty()

有没有办法在不使用聚合的情况下获得我想要的东西?

1 个答案:

答案 0 :(得分:0)

在当前的要求中,我认为你必须重新设计你的架构。架构必须更有效地进行查询。可能是Schema目前的要求是用户收藏

                 { 
                  "_id": "dhBHuZL9M+hqtKIx14iu" ,
                   "Name" : "Test",
                    "ReadMessages" [{}],
                    "UnReadMessage" [{}]
                 }

现在,对于任何用户,您都可以轻松获取已读消息和未读消息。您必须触发一个更新语句才能将消息从UnRead移动到读取。但它会发生一次,休息阅读将非常快。我知道它不会解决您的问题,但可能有助于您希望更改架构。