我正在尝试在MongoDB中处理对象数组。我需要获取与多个表达式匹配的对象的索引,但我却迷失了一部分。
这是一个简单的案例。我的实际文档还有许多其他字段,而我的$indexOfArray
将具有3或4个子表达式,但是给定此文档:
https://mongoplayground.net/p/zZKEdBQcdwW
[
{
"_id": ObjectId("5b3b206c4a25da19d05f41a2"),
"stops": [
{
"code": "MRGT",
},
{
"code": "OLDST",
},
{
"code": "ESSEXRD",
},
{
"code": "DRYP",
},
{
"code": "FNPK",
}
]
}
]
这个查询
db.collection.aggregate([
{
"$addFields": {
indexLookup: {
$indexOfArray: [
"$stops.code",
"ESSEXRD"
],
},
"indexObjectLookup": {
$indexOfArray: [
"$stops",
[
{
$eq: [
"$code",
"ESSEXRD"
]
}
]
],
},
}
}
])
我希望indexLookup
和indexObjectLookup
都返回2
但是,indexObjectLookup
返回-1
我希望有人可以阐明
修改
我从@Akrion获得了一个有益的建议,尝试使用$unwind
,它使我使用了此版本,该版本保留了文档结构,但向数组中的每个项目添加了index
:https://mongoplayground.net/p/PSl473AK8n4 >
最终,我发现不用$unwind
也可以完全不用数组索引就能完成我需要做的事情。但是我仍然不知道尝试$indexOfArray
出了什么问题。