正如标题所述,我有一个ID数组,我想strmqm -x QMHA1
。我完全可以通过以下方式从ID数组中提取文档:
find
但是,在某些情况下,与ID相关联的文档已被删除。因此,是否有可能会收到有关 DID NOT MATCH (又称为 DELETED )的ID的通知?
谢谢
答案 0 :(得分:3)
我认为mongo无法返回不匹配的结果,但是您可以使用返回的结果,并使用lodash这样的js实用程序将其与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
运算符的地方使用聚合框架。可以在以下管道中应用它,以获取已删除/不匹配的文档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)
})