2017-02-21 32 views
1

我必须在聚合pipleline中执行此操作。 我有两个字段必须用来决定是否可以包含文档。有条件地过滤MongodDb中的文档

首先是agentType - 可能具有值1或2. 其次是agentImage - key可能存在与否。

我在找什么是这样的。

如果(agentType === 1 & & agentImage不存在) - >筛选掉, 如果(agentType === 2) - >保存文件

对于agentType === 2,我想所有的文件不管agentImage存在与否。

样品文件─

在这种情况下的结果应该是─

{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

可以使用$or逻辑运算符这样的:

db.getCollection('agents').aggregate([ 
    { 
     "$match": { 
      "$or": [ 
       { "agentImage": { "$exists": true } }, 
       { "agentType": 2 } 
      ] 
     } 
    } 
]) 

find()作为

db.getCollection('agents').find({   
    "$or": [ 
     { "agentImage": { "$exists": true } }, 
     { "agentType": 2 } 
    ]   
})