有条件地过滤MongodDb中的文档

时间:2017-02-21 08:17:22

标签: mongodb mongodb-query aggregation-framework

我必须在聚合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。

1 个答案:

答案 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 }
    ]           
})