У меня есть коллекция:
{
"value" : "20",
"type" : "square",
"name" : "form1"
},
{
"value" : "24",
"type" : "circle",
"name" : "form2"
},
{
"value" : "12",
"type" : "square",
"name" : "form3"
}
Это объединение:
let searchTerm = "form2"
db.myCollec.aggregate([
{ "$facet": {
"data": [
{ "$match": { "name": searchTerm }},
{ "$project": { "name": 1, "type": 1, "_id": 0 }}
]
}},
{ "$project": {
"name": {
"$ifNull": [{ "$arrayElemAt": ["$data.name", 0] }, searchTerm ]
},
"type": {
"$ifNull": [{ "$arrayElemAt": ["$data.type", 0] }, null]
}
}}
])
дать этот результат:
{ "name" : "form2", "type" : "circle" }
и если я ищу несуществующую "form4":
{ "name" : "form4", "type" : null }
Теперь я хочу сделать это для большого количества значений, поэтому я пытаюсь поместить их в массив, а затем зациклить в этом массиве. В соответствии с асинхронным свойством JavaScript я пытаюсь этот код:
tab = [ "form2", "form4" ]
for( var i =0; i<(tab.length);i++) { (function (i) {
searchTerm = tab[i]
db.myCollec.aggregate([
{ "$facet": {
"data": [
{ "$match": { "name": searchTerm }},
{ "$project": { "name": 1, "type": 1, "_id": 0 }}
]
}},
{ "$project": {
"name": {
"$ifNull": [{ "$arrayElemAt": ["$data.name", 0] }, searchTerm ]
},
"type": {
"$ifNull": [{ "$arrayElemAt": ["$data.type", 0] }, null]
}
}}
])
}) (i) }
Нет результата ...
Если я добавлю print(searchTerm)
, то значения будут хорошо напечатаны, но результата для агрегации не будет.
Спасибо за вашу помощь.