我有以下收藏品:
_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);
});
我真的很困惑,并且不知道如何获得结果。
感谢您的帮助
答案 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 : "" }
}
}}])