gpt4 book ai didi

node.js - 如何通过 ID 数组查找文档并通知不匹配的文档

转载 作者:太空宇宙 更新时间:2023-11-03 22:59:36 27 4
gpt4 key购买 nike

正如标题所说,我有一个 ID 数组,我想找到。我完全可以通过以下方式从 ID 数组中获取文档:

model.find({_id: {$in: ids}});

但是,有时与 ID 关联的文档已被删除。因此,是否可以收到不匹配(又名已删除)ID 的通知?

谢谢

最佳答案

我认为 mongo 没有办法返回不匹配的结果,但您可以使用返回的结果并使用 js 实用程序(如 lodash)与 ids 列表进行比较。即

import { difference, map } from 'lodash'
// const { difference, map } = require('lodash')

(async () => {
const results = await model.find({_id: {$in: ids}}).lean().exec()
const deleted = difference(ids, map(results, '_id'))

console.log(deleted)

})()
<小时/>

另一种方法是使用聚合框架,其中有 $setDifference 运算符(operator)随时为您服务。这可以应用于以下管道中以获取已删除/不匹配的文档 ID:

const _ids = ids.map(id => mongoose.Types.ObjectId(id))
const pipeline = [
{ '$facet': {
'matched': [
{ '$match': { '_id': { '$in': _ids } } },
]
} },
{ '$addFields': {
'deleted': {
'$setDifference': [
_ids, { '$map': {
'input': '$matched',
'as': 'el',
'in': '$$el._id'
} }
]
}
} }
]

model.aggregate(pipeline).exec((err, results) => {
console.log(results)
})

关于node.js - 如何通过 ID 数组查找文档并通知不匹配的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51572398/

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