如何使用猫鼬在数组内部查找数据

时间:2019-08-16 04:32:44

标签: mongodb mongoose

我在MongoDB中有如下数据。

const A = { uid: '1234',
            works: [
           { name: 'car',
             item:['tire','wheel']
           },
           { name: 'ship',
             item:['tire','wheel']
           }
           ]

我的目标是查找重复的名称是否存在。
总之,我只想知道名字。
所以'res.send(result)'给我的感觉就像'[car,ship]'。 但是下面的代码不起作用。我该怎么做?非常感谢。

const workName = await User.findOne({
      uid: userID, works:{$in:['name']}
    });

1 个答案:

答案 0 :(得分:1)

最简单的方法是查找名称的集合并检查计数是否大于一。由于它位于数组内部,因此我们需要展开它。

以下查询有效,以检测子文档是否包含每个文档的重复项。

db.getCollection('collection_name').aggregate([{"$unwind":"$works"} ,{"$group":{"_id":{"name":"$works.name","uid":"$uid"},"count":{"$sum":1}}},{"$match":{"count":{"$gte":2}}}])

如果要在所有文档中查找,请从组的_id中删除uid。