Node MongoDB批处理查找?
我有一个函数,向它传递一个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中执行此查询时,它仍返回整个文档
和我的代码
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 } ]
我有一个函数,向它传递一个ID数组。我要做的实际上是检查是否有任何ID。不幸的是,我无法执行以下操作,因为.find()必须在...
回答如下:通过在查询中进行分组的$project
表达式