2016-04-01 11 views
0

Ich habe ein Dokument wie folgt aus:mongodb Rückkehr Felder optional

{ 
    "_id" : "abcdefg", 
    "status" : 1, 
    "myData": { 
    "a": "a", 
    "b": "b" 
    } 
}, 
{ 
    "_id" : "zxcvbnm", 
    "status" : 3, 
    "myData": { 
    "a": "a", 
    "b": "b" 
    } 
} 

wenn "Status" === 3, Feld "myData" zurückkehren wird, wie

myCollection.find({}, {"status": 1, "myData": 1}) 

wenn "Status"! == 3, Feld "myData" wird nicht zurückgegeben, wie:

myCollection.find({}, {"status": 1, "myData": 0}) 

Wie könnte ich das in mongodb tun?

+1

Sie können wirklich nicht. Das einzige, wo Sie eine solche Behauptung machen können, ist 'mapReduce', und das ist zu diesem Zweck übertrieben. Der beste Ansatz besteht darin, Ihre Bedingung auf jedes zurückgegebene Ergebnis anzuwenden und jedes zurückgegebene Dokument vom Cursor zu ändern. –

Antwort

0

Sie könnten sie mit Aggregation auf null setzen.

db.collection.aggregate({ 
    $project: { 
     status: 1, 
     myData: { 
      $cond: [{ 
       $eq: ['$status', 1] 
      }, '$myData', null] 
     } 
    } 
}) 

Es entfernt das Feld nicht, aber spart Ihnen etwas Verkehr.

Verwandte Themen