【问题标题】:How to get only part of the document while querying with mongoose?使用猫鼬查询时如何仅获取文档的一部分?
【发布时间】:2023-04-07 09:16:02
【问题描述】:

我有关注

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

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

【问题讨论】:

  • 用lodash包提取需要的元素怎么样?

标签: json node.js mongodb mongoose


【解决方案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);
    });

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2015-06-26
    • 2022-01-17
    • 2020-08-14
    • 2018-10-13
    相关资源
    最近更新 更多