如何在使用mongoose查询时只获取部分文档?

时间:2016-03-03 16:45:15

标签: json node.js mongodb mongoose

我有以下

{
    "_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" : [ 
                        "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

我调查了预测,但我找不到任何东西。请帮我解决一下这个。非常感谢...

2 个答案:

答案 0 :(得分: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 :(得分:1)

你不能直接做你想做的事。

MongoDB是一个文档数据库,而不是关系数据库。当您检索(find)文档时,它将始终检索整个文档。

如果您只想要内部数组,则需要将其从返回给您的完整文档中拉出来。