2016-04-01 34 views
0

我有一個這樣的文件:MongoDB的回報場任意

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

如果 「狀態」 === 3場 「myData的」 將返回,像

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

如果 「狀態」! == 3,字段「myData」不會返回,如:

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

我怎麼能在MongoDB中做到這一點?

+1

你真的不能。唯一可以做出這種斷言的是使用'mapReduce',這對於這個目的來說是過分的。最好的方法是將條件應用於每個返回的結果,並修改光標所返回的每個文檔。 –

回答

0

您可以將它們設置爲null並進行聚合。

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

它不會刪除該字段,但會爲您節省一些流量。