簡體   English   中英

如何從MongoDB中的數組中獲取數據

[英]How to fetch data from array in mongodb

我下面有mongoDB收集數據。 我試圖使用typesOfExicution,companyName和projectName來獲取數據。 我寫了以下查詢以查找

db.getCollection('SETTINGS').find({'companyName':'VV', 'typesOfExicution' : 'validation', 'automation.projectName' : 'hdh'})

如果我不使用automation.projectName我可以找到數據。 但是,如果我使用它,那么它將返回0條記錄。

那么從數組中查找數據的確切查詢是什么。

/* 1 */
{
    "_id" : ObjectId("5abce315cabca22270eead6a"),
    "typesOfExicution" : "validation",
    "modesOfExicution" : "auto",
    "automation[0][projectName]" : "Second",
    "automation[0][modules][]" : "Second module",
    "automation[0][assets][]" : "Second assets",
    "companyName" : "VV"
}

/* 2 */
{
    "_id" : ObjectId("5abce31ccabca22270eead6b"),
    "typesOfExicution" : "validation",
    "modesOfExicution" : "auto",
    "automation[0][projectName]" : "Second",
    "automation[0][modules][]" : "Second module",
    "automation[0][assets][]" : "Second assets",
    "companyName" : "VV"
}

/* 3 */
{
    "_id" : ObjectId("5abce321cabca22270eead6c"),
    "typesOfExicution" : "validation",
    "modesOfExicution" : "auto",
    "automation[0][projectName]" : "hdh",
    "automation[0][modules][]" : "ds",
    "automation[0][assets][]" : "djv",
    "companyName" : "VV"
}

這不是您應該在MongoDB中存儲數組的方式。 您應該將數組元素存儲為嵌入式文檔。 正如@Alexis在這里提到的,您的數據庫集合結構到底是什么不清楚,所以我希望這是您給定輸入所期望的:

/* 1 */
{
"_id" : ObjectId("5abce315cabca22270eead6a"),
"typesOfExicution" : "validation",
"modesOfExicution" : "auto",
"automation" : [ 
    {
        "projectName" : "Second",
        "modules" : [ 
            "Second module"
        ],
        "assets" : [ 
            "Second assets"
        ]
    }
],
"companyName" : "VV"
}

/* 2 */
{
"_id" : ObjectId("5abce31ccabca22270eead6b"),
"typesOfExicution" : "validation",
"modesOfExicution" : "auto",
"automation" : [ 
    {
        "projectName" : "Second",
        "modules" : [ 
            "Second module"
        ],
        "assets" : [ 
            "Second assets"
        ]
    }
],
"companyName" : "VV"
}

/* 3 */
{
"_id" : ObjectId("5abce321cabca22270eead6c"),
"typesOfExicution" : "validation",
"modesOfExicution" : "auto",
"automation" : [ 
    {
        "projectName" : "hdh",
        "modules" : [ 
            "ds"
        ],
        "assets" : [ 
            "djv"
        ]
    }
],
"companyName" : "VV"
}

獲得上述數據后,請使用automation.projectName ,您應獲得如下結果:

在此處輸入圖片說明

我不太確定您存儲的文檔的結構。 我相信它看起來像:

   {
      "typesOfExicution": string,
      "modesOfExicution": string,
      "automation": [{ projectName: string, modules: string, assets: string }]
      "companyName" : string
   }

如果要對屬於組成數組automation對象的projectName執行查詢,則需要使用$elemMatch運算符:

   db.getCollection('SETTINGS').find({'companyName':'VV', 'typesOfExicution' : 'validation', 'automation' : { $elemMatch: { 'projectName': 'myProject' } }  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM