如何使用猫鼬查询嵌套对象内部的数组?

时间:2020-05-29 14:12:17

标签: javascript node.js mongodb mongoose

我的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),但返回的对象将在foobar中只有status是{{1}的对象}。 (ready)。

我希望获取所有对象(因为我的过滤器仅位于data.foo.[?].status === 'ready' and/or data.bar.[?].status === 'ready'上),但是foo和bar字段仅包含{ready}的data

注意:在statusfoo中,我的数据大小为1mb。

如何用猫鼬查询做到这一点?有可能吗?还是只查询所有对象并使用barfilter

我这样做是行不通的,因为它获得了map中的所有状态:

data.foo

1 个答案:

答案 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"
            ]
          }
        }
      }
    }
  }
])