我现在正在使用类似于下面的东西,它可以工作并抓取我需要的东西:
state: {
$filter: {
input: "$location.address_components",
as: "address_comp",
cond: { $in: ["administrative_area_level_1", "$$address_comp.types"]}
}
},
在我的用例中,它并不总是得到保证。在这种情况下,我对country
和postal
做了同样的事情,对条件进行了不同的相等性检查。然而,我留下的是我返回的文档上的state
字段,这是一个最大大小为1的数组,里面有一个对象。
理想情况下,我希望该字段只是对象本身,而不是由filter
操作符返回的指定对象的数组。
很难猜测您的整个聚合管道是什么样子,但我将假设您的最后阶段产生如下内容:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"key1": "value1",
"state": [
{
"somekey": "dssdd"
}
]
}
]
在这种情况下,您只需要$unwind
state
路径。所以,我再次假设你的最后一个阶段是$project
:
{
"$project": {
...
...
state: {
$filter: {
input: "$location.address_components",
as: "address_comp",
cond: { $in: ["administrative_area_level_1", "$$address_comp.types"]}
}
}
}
},
{
"$unwind": "$state"
}
结果将是:
[
{
"_id": ObjectId("5a934e000102030405000000"),
"key": 1,
"state": {
"somekey": "dssdd"
}
}
]