我有一个这样的文件
{
"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
的文档中
有任何提示吗?
更新 问题解决后,我想对其进行优化。
答案 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"
}
}