gpt4 book ai didi

javascript - mongoose mongodb - 删除所有条件为真的地方,除了一个

转载 作者:可可西里 更新时间:2023-11-01 09:47:37 26 4
gpt4 key购买 nike

如果一个集合有一个狗的列表,并且在某些种族中有重复的条目。我如何从一个查询中删除除单个特定/非特定查询之外的所有内容?

我猜想可以从 Model.find() 中获取所有索引,遍历除第一个索引之外的每个索引并调用 Model.remove(),但我宁愿让数据库通过查询处理逻辑。这怎么可能?

我想要的伪代码示例:

Model.remove({race:"pitbull"}).where(notFirstOne);

最佳答案

要删除除一个以外的所有文档,您需要一种方法来获取所有过滤后的文档,按标识符对它们进行分组,为该组创建一个 ID 列表并从中删除一个 ID这个列表。有了这些信息,您就可以运行另一个操作来删除具有这些 ID 的文档。本质上,您将运行两个查询。

第一个查询是一个聚合操作,旨在获取具有潜在核攻击文档的 ID 列表:

(async () => {
// Get the duplicate entries minus 1
const [doc, ...rest] = await Module.aggregate([
{ '$match': { 'race': 'pitbull'} },
{ '$group': {
'_id': '$race',
'ids': { '$push': '$_id' },
'id': { '$first': '$_id' }
} },
{ '$project': { 'idsToRemove': { '$setDifference': [ ['$id'], '$ids' ] } } }
]);

const { idsToRemove } = doc;

// Remove the duplicate documents
Module.remove({ '_id': { '$in': idsToRemove } })
})();

关于javascript - mongoose mongodb - 删除所有条件为真的地方,除了一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54289184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com