Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Javascript 在Mongoose中从数组中搜索和删除的最佳方式_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 在Mongoose中从数组中搜索和删除的最佳方式

Javascript 在Mongoose中从数组中搜索和删除的最佳方式,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我想知道我在express中使用猫鼬的方式是否做错了什么。我的代码看起来不对劲。在文档中添加内容需要2个mongoose查询,我想知道这是否可以简化 因此,这个函数将在express中的routes中引用,我如何简化它?它在集合中搜索用户通知文档,删除挂起数组中的某些内容,然后保存它。我还想添加另外2个查询,以查找用户接受的请求文档,并在其中添加旧的挂起文档,但这将使一个请求中总共有4个查询和一个循环。。。听起来不太对劲 var acceptRequest = function(userId,

我想知道我在express中使用猫鼬的方式是否做错了什么。我的代码看起来不对劲。在文档中添加内容需要2个mongoose查询,我想知道这是否可以简化

因此,这个函数将在express中的routes中引用,我如何简化它?它在集合中搜索用户通知文档,删除挂起数组中的某些内容,然后保存它。我还想添加另外2个查询,以查找用户接受的请求文档,并在其中添加旧的挂起文档,但这将使一个请求中总共有4个查询和一个循环。。。听起来不太对劲

var acceptRequest = function(userId, requesterId, callback){

    NotificationsReference.findOne({ id: userId}, function(err, result){
        if(err || result === null){
            callback("Could not accept notification. Stack: " + err);
        }
        else{
            var deletedRefId = 'unchanged';
            for(i = 0; i < result.pending.length; i++){

               if( result.pending[i].refId = requesterId){
                   //Removing searched element of the array
                   deletedRefId = result.pending.splice(i, 1);
                   result.save(function (err) {
                   if (err) { 
                        callback("Error in saving request(2). Stack Trace: " + err); 
                    }
                    else{
                        callback("Success");
                    }

               }

            }

        }
    });

}
var-acceptRequest=function(userId、requesterId、回调){
NotificationsReference.findOne({id:userId},函数(err,result){
if(err | | result==null){
回调(“无法接受通知。堆栈:+err”);
}
否则{
var deletedRefId=‘未更改’;
对于(i=0;i
如果您想查找和更新某些内容,通常会有两个请求:-)您可以尝试通过添加对NotificationsReference的用户引用,并在获得NotificationsReference时正确修改它们。

我也遇到过类似的问题,但现在我找到了解决方案。您可以从挂起的数组中删除项,只需对其调用remove函数,mongoose数组即可实现:


这么好的问题:-)
var acceptRequest = function(userId, requesterId, callback){

NotificationsReference.findOne({ id: userId}, function(err, result){
    if(err || result === null){
        callback("Could not accept notification. Stack: " + err);
    }else{
        var deletedRefId = 'unchanged';
        result.pending.remove(requesterId)
        result.save(callback(err))
    }
});
}