MongoDB итерация по совокупности - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть коллекция:

{  
  "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), то значения будут хорошо напечатаны, но результата для агрегации не будет.

Спасибо за вашу помощь.

...