[英]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.