Массив запросов по сохраненному индексу в документе в MongoDB - PullRequest
0 голосов
/ 05 октября 2018

У меня есть такой документ

{
    "status": {
        "current": 0,
        "priority": [{
            "operationName": "PHOTO",
            "status": "WAITING"
        },
        {
            "operationName": "DESIGN",
            "status": "NOTARRIVED"
        },
        {
            "operationName": "COLOR_SEPARATION",
            "status": "NOTARRIVED"
        }]
    }
}

, и я хочу запрашивать данные, подобные этим

{
    "status.priority.$status.current.operationName": {
        $in: ['SERVICES', 'PHOTO']
    }
}

, когда я запрашиваю подобные

{
    "status.priority.0.operationName": {
        $in: ['SERVICES', 'PHOTO']
    }
}

этовозвращает данные, необходимые, поскольку 'PHOTO' является текущей операцией.

Мне нужно выполнить запрос на основе индекса массива, и этот индекс хранится в документе в status.current

anyподсказка?

ОБНОВЛЕНИЕ После того, как вопрос решен, я хочу его оптимизировать.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Для этого вам нужно использовать aggregation

db.collname.aggregate([{
    "$project": {
      "_id": 1,
      priority: { $arrayElemAt: ["$status.priority", '$status.current'] },
    }
  },
  {
    $match: {
      "priority.operationName": {
        $in: ['DESIGN', 'COLOR_SEPARATION', 'PHOTO']
      }

    }
  }
])

Это будет работать для вас.

Результат будет выглядеть как

{
    "_id" : ObjectId("5b6b656818883ec018d1542d"),
    "priority" : {
        "operationName" : "PHOTO",
        "status" : "WAITING"
    }
}
0 голосов
/ 05 октября 2018

Вы можете использовать $arrayElemAt с $expr в 3,6.

Что-то вроде

db.colname.find(
 {"$expr":{
   "$in":[
     {"$arrayElemAt":["$status.priority.operationName","$status.current"]},
     ['DESIGN', 'COLOR_SEPARATION', 'PHOTO']
   ]
 }}
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...