我有一些看起来像这样的数据:
{
"_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()
有没有办法在不使用聚合的情况下获得我想要的东西?
答案 0 :(得分:0)
在当前的要求中,我认为你必须重新设计你的架构。架构必须更有效地进行查询。可能是Schema目前的要求是用户收藏
{
"_id": "dhBHuZL9M+hqtKIx14iu" ,
"Name" : "Test",
"ReadMessages" [{}],
"UnReadMessage" [{}]
}
现在,对于任何用户,您都可以轻松获取已读消息和未读消息。您必须触发一个更新语句才能将消息从UnRead移动到读取。但它会发生一次,休息阅读将非常快。我知道它不会解决您的问题,但可能有助于您希望更改架构。