我的mongodb中存储了复杂的对象,如下所示:
const collectionFromMongodb = [
{
id: ObjectID(),
text: 'blabla',
data: {
foo: [
{ id: ObjectID(), status: 'ready' },
{ id: ObjectID(), status: 'notready' },
],
bar: [
{ id: ObjectID(), status: 'ready' },
{ id: ObjectID(), status: 'notready' },
],
},
},
];
我想查询所有对象(find
),但返回的对象将在foo
和bar
中只有status
是{{1}的对象}。 (ready
)。
我希望获取所有对象(因为我的过滤器仅位于data.foo.[?].status === 'ready' and/or data.bar.[?].status === 'ready'
上),但是foo和bar字段仅包含{ready}的data
。
注意:在status
和foo
中,我的数据大小为1mb。
如何用猫鼬查询做到这一点?有可能吗?还是只查询所有对象并使用bar
和filter
?
我这样做是行不通的,因为它获得了map
中的所有状态:
data.foo
答案 0 :(得分:1)
希望这就是您所需要的。将$ match管道更改为您需要查找的任何内容。
https://mongoplayground.net/p/o1qk4wla5C6
db.collection.aggregate([
{
$match: {
"data.bar.status": "ready"
}
},
{
$project: {
"data.foo": {
$filter: {
input: "$data.foo",
as: "foo",
cond: {
$eq: [
"$$foo.status",
"ready"
]
}
}
},
"data.bar": {
$filter: {
input: "$data.bar",
as: "bar",
cond: {
$eq: [
"$$bar.status",
"ready"
]
}
}
}
}
}
])