子文档中的MongoDB $ ne

时间:2014-05-06 19:58:27

标签: mongodb

{
    "_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。 还有如何计算已经给出案例的子文档?

1 个答案:

答案 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:我没有在我的系统上试过这个。