节点MongoDB批量查找?

K20GH

我有一个函数,向它传递一个ID数组。我要做的实际上是检查是否有任何ID。

不幸的是,我不能执行以下操作,因为.find()必须将其与其他操作结合使用。

有没有办法可以批量查找?每个数组将包含100个ID,并且会有很多这样的查询,所以我宁愿不要一一进行。

try {
    const bulk = db.collection('designs').initializeUnorderedBulkOp();
    ids.forEach(a => {
        bulk.find({"items.meta.id": a})
    });
    const results = await bulk.execute();
    console.log(results)
} catch (e) {
    console.log(e)
}

为清晰起见:

我使用Mongo作为Firebase数据的索引以允许搜索功能。每个设计文档均包含一个名为Items的数组,其中“ item”是一个包含关键项数据(例如ID,名称,平台)的对象,以及一个名为的对象meta根据平台,元对象包含不同的信息。

我需要做的是一次发送100个以上的ID,然后查询我的设计集合以查看是否在包含ID的Items数组中存在对象。

如果该ID存在于items.meta.id字段中,那么我只需要将该ID推入一个新的数组中,并在查询完所有100个ID之后,将存在的ID数组作为响应发送回去

编辑:

我现在有以下查询可以正常使用,但是在Node中执行此查询时,它仍返回整个文档

https://mongoplayground.net/p/EM9VTs7YYIj

还有我的代码

    const results = await collection.aggregate({
        $unwind:  '$items'
    }, {
        $match: {
            'items.meta.id': {
                $in: ids
            },
            'uid': uid
        }
    }, {
        $group: {
            '_id': '$items.meta.id'
        }
    }).toArray()

    console.log(results)

返回值:

[ { _id: 5d9378a333247165d8ea6f22,
    id: 'OczQL9Blwx79ZXtJcgrV',
    name: 'Brewdolf',
    nameci: 'brewdolf',
    uid: '1uD82gAXORYsyimX5Dw23DDAimx1',
    selected_preview_image:
     'designs/1uD82gAXORYsyimX5Dw23DDAimx1/OczQL9Blwx79ZXtJcgrV/images/preview_BrewDolf.png',
    items:
     { active: true,
       id: 'Nz36jpTaJCjp3nsAqsXA',
       platform: 'a',
       price: '1645',
       title:
        'Brewdolph Funny Drinking Reindeer Christmas Craft Beer T-Shirt',
       meta: [Object] },
    tags: null } ]
安比安

$project通过该_id表达式添加一个阶段,该阶段用于对查询进行分组。

优化:以具有$matchuid之前的平仓array项目(主要是为了减少管道中下一阶段的文档)。

const results = await db
  .collection("target_collection")
  .aggregate(
    {
      $match: {
        uid: uid
      }
    },
    {
      $unwind: "$items"
    },
    {
      $match: {
        "items.meta.id": {
          $in: ids //array
        }
      }
    },
    {
      $group: {
        _id: "$items.meta.id"
      }
    },
    {
      $project: {
        "_id": 1
      }
    }
  )
  .toArray();

结果(演示):

[{"_id":"gop"},{"_id":"foo"}]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章