node.js - 使用 mongoose 获取子文档的 Node api

标签 node.js mongodb api express mongoose

我的 MongoDB 存储具有以下结构的文档:

{
    "application_detail":{},
    "curl_detail":{
        "Curl1":{
            "key1":"value1",
            "key2":"value2"
        },
        "Curl2":{
            "key1":"value1",
            "key2":"value2"        
        },
        "Curl3":{
            "key1":"value1",
            "key2":"value2"
        },
        "Curl4":{
            "key1":"value1",
            "key2":"value2"
        },
        /*total number of curls are unknown*/
    }
}

如何使用express和mongoose从mongoDB中获取curl_detail下存在的所有 curl 的key1

预期输出:

{
    "curl_detail": {
        "Curl1": {
            "key1": "value1"
        },
        "Curl2": {
            "key1": "value1"
        },
        "Curl3": {
            "key1": "value1"
        },
        "Curl4": {
            "key1": "value1"
        }
    }
}

注意:卷发总数未知。

最佳答案

我想建议您更改数据结构

"curl_detail": {
    "Curl1": {
        "key1": "value1",
        "key2": "value2"
    },
    "Curl2": {
        "key1": "value1",
        "key2": "value2"
    }
}

"curl_detail": [{
        "key1": "value1",
        "key2": "value2"
    },
    {
        "key1": "value1",
        "key2": "value2"
    }
]

将数据结构存储在数组中将使您可以更轻松地查找某些数据。此外,也不需要拥有具有 Curl1Curl2 等属性的对象。

对于新的数据结构,已经有一些答案和解释:

1) Mongo find value with unknown parent key

2) Query MongoDB by value when parent key is unknown

3) MongoDB: Find document given field values in an object with an unknown key

更新

如果无法更改数据结构,请参阅此解决方案(使用 $arrayToObject/$objectToArray 来确定嵌套键的名称,例如“Curl1” ”):

db.collection.aggregate([{
        $addFields: {
            curl_detail: {
                $arrayToObject: {
                    $map: {
                        input: {
                            $objectToArray: "$curl_detail"
                        },
                        as: "details",
                        in: {
                            k: "$$details.k",
                            v: {
                                key1: "$$details.v.key1"
                            }
                        }
                    }
                }
            }
        }
    },
    {
        $project: {
            _id: 0,
            curl_detail: 1
        }
    }
])

输出如下:

[
  {
    "curl_detail": {
      "Curl1": {
        "key1": "value1"
      },
      "Curl2": {
        "key1": "value1"
      },
      "Curl3": {
        "key1": "value1"
      },
      "Curl4": {
        "key1": "value1"
      }
    }
  }
]

您可以通过Mongo Playground查看

关于node.js - 使用 mongoose 获取子文档的 Node api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60038514/

相关文章:

node.js - 如何在 meteor 上创建自动增量字段?

java - 从android中的API获取数据

api - Instagram API 速率限制 - 已签名的 POST 调用 - 仍被视为未签名的调用

javascript - 从 .env 文件访问 .pem 公钥

node.js - Firestore 偶尔会触发超时

javascript - 动态参数页面评估

mongodb - 如何更改 MongoDB mapreduce 结果的结构?

arrays - Mongodb:如何自动增加子文档字段?

python - 如何在 Windows 10 上获取 ORACLE 11 g DATABASE 的 IP 地址以远程连接到它?

javascript - 使用 `NODE_MODULE_VERSION 70.` 而不是 NODE_MODULE_VERSION 48 重建 nbind