Node.js 如何通过ID数组查找文档,并通知不匹配的文档
正如标题所说,我有一个ID数组,我想Node.js 如何通过ID数组查找文档,并通知不匹配的文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,正如标题所说,我有一个ID数组,我想查找它。我完全可以通过以下方式从ID数组中获取文档: model.find({_id: {$in: ids}}); 但是,在某些情况下,与ID关联的文档已被删除。因此,是否可能得到不匹配的ID的通知(即已删除的) 谢谢我不认为mongo有返回不匹配结果的方法,但您可以使用返回的结果,并使用js实用程序(如e 另一种方法是使用聚合框架,其中有操作符供您使用。这可以在以下管道中应用,以获取已删除/不匹配的文档ID: const _ids = ids.map(i
查找它。我完全可以通过以下方式从ID数组中获取文档:
model.find({_id: {$in: ids}});
但是,在某些情况下,与ID关联的文档已被删除。因此,是否可能得到不匹配的ID的通知(即已删除的)
谢谢我不认为mongo有返回不匹配结果的方法,但您可以使用返回的结果,并使用js实用程序(如e
另一种方法是使用聚合框架,其中有操作符供您使用。这可以在以下管道中应用,以获取已删除/不匹配的文档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)
})
array.find不接受函数吗?为什么要传递一个值?mongodb运算符?您在寻找一个在文档被删除时将被调用的函数吗?我在寻找一种方法来识别那些不匹配的元素。例如,我可能会传入10个ID,但只返回9个文档,我想找出哪一个没有返回文档嘿,谢谢你的回答。在从find
获得结果后,我似乎必须决定使用lodash
。当我解决问题时,我会将此标记为答案。
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)
})