2017-02-21 5 views
1

私はこれを集合piplelineで行う必要があります。 私は、文書を含めることができるかどうかを決定するために使用される2つのフィールドを持っています。条件付きでMongodDbの文書をフィルタリングする

最初はagentType-の値が1または2である可能性があります。 2番目はagentImage - キーが存在するかどうかです。

私が探しているのは、このようなものです。

(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}}]}}}}]) 

をBE-すべき

サンプル

documents-、それは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 } 
    ]   
}) 

として
関連する問題