簡體   English   中英

如何從嵌套數組中獲取字段和值並查詢它們以在 mongodb 中查找文檔?

[英]how can I get field and value from nested array and query them to find doc in mongodb?

我正在嘗試從動態的嵌套數組中獲取字段和值(List1 和 List2 ar 動態)

let selectionCritea = {
  List1: [ 'mk singh', 'saurav kashsyap' ],
  List2: [
    { labelName: 'Location', values: ['India','America','Japan'] },
    { labelName: 'gender', values: ['male'] }
  ]
}

我想從 db 中找到具有“labelname”屬性和相應“values”數組中的值的文檔,即性別是男性,位置是印度、美國或日本。 這是我的模型架構:

{ "_id" : "6123e7ahdhdfdj334733",
    "name" : "Mohit Kumar",
    "gender" : "male",
    "Location" : "India",
    },
   { "_id" : "6123e7ahdhdfdj334731",
    "name" : "saurav  Kashyap",
    "gender" : "male",
    "Location" : "Nepal",
    },
   { "_id" : "6123e7ahdhdfdj334720",
    "name" : "Shaline",
    "gender" : "female",
    "Location" : "america",
    },

所以我應該只得到第一個文檔,因為性別是男性並且位置來自值數組。 我已經嘗試了我所有的知識,但無法得到它

首先你需要在客戶端准備一個查詢,

 let selectionCritea = { List1: [ 'mk singh', 'saurav kashsyap' ], List2: [ { labelName: 'Location', values: ['India','America','Japan'] }, { labelName: 'gender', values: ['male'] } ] } let query = {}; // get regular expression query condition let names = []; selectionCritea.List1.forEach(q => { names.push(q) }) if(names.length) { query.name = { $regex: names.join("|") } } // prepare List2 conditions selectionCritea.List2.forEach(q => { query[q.labelName] = (Array.isArray(q.values)? { $in: q.values }: q.values); }) console.log(query)

您可以在查找查詢中使用上面准備好的查詢:

db.collection.find(query);

操場

暫無
暫無

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

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