Javascript 如何使用mongoose查询嵌套对象中的数组?

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' },

我的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
中只有
状态
已准备好的对象。(
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"
            ]
          }
        }
      }
    }
  }
])