Javascript 如何使用mongoose查询嵌套对象中的数组?
我的mongodb中存储的复杂对象如下所示:Javascript 如何使用mongoose查询嵌套对象中的数组?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我的mongodb中存储的复杂对象如下所示: const collectionFromMongodb = [ { id: ObjectID(), text: 'blabla', data: { foo: [ { id: ObjectID(), status: 'ready' }, { id: ObjectID(), status: 'notready' },
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
中只有状态
已准备好的对象。(data.foo.[?].status=='ready'和/或data.bar.[?].status=='ready'
)
我希望得到所有的对象(因为我的过滤器只在数据上),但是foo和bar字段只包含'ready'的状态
注意:在foo
和bar
中,我的数据大小为1mb
如何使用mongoose查询实现这一点?有可能吗?或者只需查询所有对象并使用过滤器
和映射
我这样做了,但不起作用,因为它获取data.foo中的所有状态:
find('data.foo':{$elemMatch:{status:'ready'})
希望这是您需要的。将$match管道更改为您需要查找的任何内容
在你的问题中,表
不是一个对象,它看起来像一个对象数组。表意味着集合。对不起,你的条件和/或
不可能。必须是其中一个吗?你需要满足两个条件还是其中一个?你介意发布一个预期结果吗?嗯……最后我需要带有f的对象oo
和条
(如果有)仅限状态为就绪
的那些。我可以用find only进行操作吗?
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"
]
}
}
}
}
}
])