我必须在聚合pipleline中这样做。 我有两个字段必须用来决定是否可以包含文档。
首先是agentType-可能具有值1或2。 第二个是agentImage - 密钥可能存在与否。
我正在寻找的是这样的。
if(agentType === 1&& agentImage not exists) - >过滤掉, 如果(agentType === 2) - >保留文件
对于agentType === 2我想要所有文件而不管agentImage是否存在。
样本文件 -
{agentType: 1, agentImage: "abc"}
{agentType: 2}
{agentType: 1, location: 'temp'}
{agentType: 2, agentImage: "xyz"}
在这种情况下,结果应为 -
{agentType: 1, agentImage: "abc"}
{agentType: 2}
{agentType: 2, agentImage: "xyz"}
db.getCollection('agents').aggregate([{"$match":{agentImages: {'$exists':{'$or':[{$and:[{$eq:{'agentType': 1}},{$ne: {'agentImages': null}}]},{$eq: {'agentType': 2}}]}}}}])
这不起作用,它使用agentType 2过滤掉所有文档,而不使用agentImage。
答案 0 :(得分:0)
您可以使用 $or
逻辑运算符:
db.getCollection('agents').aggregate([
{
"$match": {
"$or": [
{ "agentImage": { "$exists": true } },
{ "agentType": 2 }
]
}
}
])
或find()
为
db.getCollection('agents').find({
"$or": [
{ "agentImage": { "$exists": true } },
{ "agentType": 2 }
]
})