2016-03-03 40 views
0

我有以下如何在使用貓鼬查詢時僅獲取部分文檔?

{ 
    "_id" : ObjectId("56d808d826941f84bc697b4e"), 
    "outerArray" : [ 
     { 
      "middleArray" : [ 
       { 
        "someKey": "value", 
        "innerArray" : [ 
         "F999-99999", 
         "F999-999999", 
         "FAF-99999", 
         "FSF-99999", 
         "FSW-99999", 
         "FSX-99999", 
         "FAF-999999", 
         "FSF-999999", 
         "FSW-999999", 
         "FSX-999999" 
        ] 
       } 
      ] 
     } 
    ] 
} 

當我查詢

Model.find({outerArray.middleArray.someKey = 'value'},outerArray.middleArray.innerArray)},function(err,results){ 
//do some thing 
} 

我與外部結構相處innerArray。但我想要的只是innerArray部分像 -

"innerArray" : [ 
         "F999-99999", 
         "F999-999999", 
         "FAF-99999", 
         "FSF-99999", 
         "FSW-99999", 
         "FSX-99999", 
         "FAF-999999", 
         "FSF-999999", 
         "FSW-999999", 
         "FSX-999999" 
        ] 

所以我不需要所有外部陣列狀outerArray [0] .middleArray [0] .innerArray

我看着預測,但我遍歷無法找到任何東西。請幫我解決一下這個。非常感謝...

+1

如何使用lodash包提取需要的元素? – num8er

回答

1

這個怎麼樣?

var _ = require('lodash'); 

var data = { 
    "_id" : "SOMETHING", 
    "outerArray" : [ 
     { 
      "middleArray" : [ 
       { 
        "someKey": "value", 
        "innerArray" : [ 
         "F999-99999", 
         "F999-999999", 
         "FAF-99999", 
         "FSF-99999", 
         "FSW-99999", 
         "FSX-99999", 
         "FAF-999999", 
         "FSF-999999", 
         "FSW-999999", 
         "FSX-999999" 
        ] 
       } 
      ] 
     } 
    ] 
} 

data = _.result(data, "outerArray[0].middleArray[0].innerArray", null); 
console.log(data); 

也有你試過嗎?

Model.find(
    {outerArray.middleArray.someKey: 'value'}, 
    'outerArray.middleArray.innerArray', 
    function(err,results){ 
     console.log(results); 
    }); 
1

你不能直接做你想做的。

MongoDB是一個文檔數據庫,而不是關係數據庫。當您檢索(find)文檔時,它將始終檢索整個文檔。

如果您只想要內部數組,您需要將其從返回給您的完整文檔中提取出來。

+0

對於一些澄清,頂級鍵可以[有選擇地包括/排除](https://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/) – cdbajorin