mongodb - 如何使用$或$ $项目

时间:2018-04-16 08:56:42

标签: mongodb

我有以下收藏品:

_id,
one,
two,
messages: [{
    sender
    seen
}]

我需要计算每个集合中“消息”的数量,其中(one=1 AND sender IS NOT 1) OR (two=1 AND sender IS NOT 1)

'$or': [
    { 'one': 1, 'messages.sender': {$ne: 1},
    { 'two': 1, 'messages.sender': {$ne: 1}
]

修改

当我尝试使用$project $or时,不返回任何内容

Conversation.aggregate([
    {
        '$or': [
            { 'one': 1, 'messages.sender': {$ne: 1},
            { 'two': 1, 'messages.sender': {$ne: 1}
        ]
    },
    {

        $project: {
            count: { $size:"$messages" }
        }
    }
]).exec(function (err, c) {
    res.json(c);
});

我真的很困惑,并且不知道如何获得结果。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以使用2.6版本中的$ cond运算符作为解决方案。

假设我们有下一个集合:

{ 
    "_id" : ObjectId("5ad469bb18a5a3164402d279"), 
    "Show" : true, 
    "Name" : "Alamir"
}
{ 
    "_id" : ObjectId("5ad469c318a5a3164402d27a"), 
    "Show" : false, 
    "Name" : "Alamir"
}

我们希望根据' Show'来投射结果。归档为(如果show == true则显示该字段,否则将结果集隐藏在结果集中)

所以查询将是:

db.myCollection.aggregate([
    { $project : 
      { Name : 1 , 
        Show : 
      { 
        $cond : { if : { $eq : ["$Show" , true] } , then : "$Show" , else : "" } 
      }
      }}])