{
"_id" : ObjectId("53692eb238ed04c824679f18"),
"firstUserId" : 1,
"secondUserId" : 17,
"messages" : [
{
"_id" : ObjectId("5369338997b964b81d579fc6"),
"read" : true,
"dateTime" : 1399403401,
"message" : "d",
"userId" : 1
},
{
"_id" : ObjectId("536933c797b964b81d579fc7"),
"read" : false,
"dateTime" : 1399403463,
"message" : "asdf",
"userId" : 17
}
]
}
我正在尝试选择firstUserId = 1的所有文档,并且还有子文档 userId differentnet($ ne)为1且read = false。 我试过了:
db.usermessages.find({firstUserId: 1, "messages.userId": {$ne: 1}, "messages.read": false})
但它返回空原因消息同时包含1和17。 还有如何计算已经给出案例的子文档?
答案 0 :(得分:1)
您是否正在尝试获取符合条件后返回的所有文件的计数?如果是,那么您可以考虑使用聚合框架。 http://docs.mongodb.org/manual/aggregation/
可以通过以下方式来获取计数:
db.usermessages.aggregate(
{ "$unwind": "$messages" },
{ "$match":
{ "firstUserId": 1,
"messages.userId": { "$ne" : 1},
"messages.read": false
}
},
{ "$group": { "_id" :null, "count" : { "$sum": 1 } } }
)
希望这有帮助。
PS:我没有在我的系统上试过这个。