通过MongoDB中文档中存储的索引查询数组

时间:2018-10-05 11:12:58

标签: mongodb mongoose mongodb-query aggregation-framework

我有一个这样的文件

{
    "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的文档中

有任何提示吗?

更新 问题解决后,我想对其进行优化。

2 个答案:

答案 0 :(得分:1)

您可以在{3.6中将$arrayElemAt$expr一起使用。

类似

db.colname.find(
 {"$expr":{
   "$in":[
     {"$arrayElemAt":["$status.priority.operationName","$status.current"]},
     ['DESIGN', 'COLOR_SEPARATION', 'PHOTO']
   ]
 }}
)

答案 1 :(得分:1)

为此,您需要使用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"
    }
}