【问题标题】:querying specific sub documents in MongoDB using mongoose使用 mongoose 查询 MongoDB 中的特定子文档
【发布时间】:2020-10-27 01:49:12
【问题描述】:

我一直在手动尝试 Mongo 文档中的几种方法,但似乎无法解决我的问题。这是我的数据结构供参考

"loopback": [
        {
            "_date": "some date",
            "dutTestParams": [],
            "_id": "5f680665dfbfb74e78cae175",
            "paramId": "dummyid",
            "jtagApbStatus": "true",
            "dutYaml": "dummy_yaml",
            "dutSequenceId": "dummy_sequence",
            "dutGitVersion": "1.0.1",
            "guiVersion": "1.0",
            "projectId": "alphacore",
            "jobId": "id",
            "pvt": "dummypvt",
            "rate": 1,
            "refclk": 1,
            "channelLoss": 1,
            "voltage1": 1,
            "voltage2": 0.5,
            "voltage3": 0.5,
            "temp": 10,
            "txwidth": 8,
            "rxwidth": 8,
            "name": "loopback",
            "data": [
                {
                    "onLane": [
                        1
                    ],
                    "_id": "5f680675dfbfb74e78cae17c",
                    "chpid": "chip1",
                    "loopbackname": "BER",
                    "loopbackvalue": 0,
                    "laneid": 1,
                    "iteration": 1
                },
                {
                    "onLane": [
                        1
                    ],
                    "_id": "5f680675dfbfb74e78cae17d",
                    "chipid": "chip2",
                    "loopbackname": "BER",
                    "loopbackvalue": 0,
                    "laneid": 1,
                    "iteration": 1
                },{....}, ....., {....}]  

基本上我有一个父文档。父标题文档中存储有测试数据。此数据与测试相关,因此不一定非要是 BER。它可以是其他测试点。此外,它包含了测试中测试的所有芯片。

我可以在查询后过滤数据,这很简单。但是,有什么方法可以进行特定查询吗?我理想中想要的是能够按照这些思路做一些事情:

db.testdata.find({jobid:"some id", data.0.chipid:"chip1"})

所以查询返回标题父文档和只有具有chipid == chip1 的子文档。当我尝试按照这些思路进行操作时,我得到了所有子文档,这不是我想要的。

非常感谢任何有经验的帮助!

【问题讨论】:

    标签: javascript database mongodb express mongoose


    【解决方案1】:

    使用这个查询 -

    db.collection.aggregate([
      {
        "$match": {
          jobId: "id"
        }
      },
      {
        "$unwind": "$data"
      },
      {
        "$match": {
          "data.chipid": "chip1"
        }
      }
    ])
    

    试试Mongo Playground

    【讨论】:

    • 谢谢大家支持。我假设这个一般流程适用于子文档中的任何内容?
    • 是的,它确实有效。在操场上试试。如果有效,请接受答案。
    • 如果对您有用,请考虑接受答案。
    猜你喜欢
    • 2020-08-02
    • 2013-09-10
    • 1970-01-01
    • 2014-01-22
    • 2012-10-17
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多