Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何通过ID数组查找文档,并通知不匹配的文档_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 如何通过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数组,我想
查找它。我完全可以通过以下方式从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)
})