【问题标题】:$pull in MongoDb in not working as expected [duplicate]$pull 在 MongoDb 中没有按预期工作 [重复]
【发布时间】:2018-04-16 13:32:47
【问题描述】:

我有一个数组,我正在尝试删除基于 _id 的数据,但部分数据被提取出来并填充了 NULL 值。

数组

vehicle : [
{
  data :{ 
  _id:"adkabd",
  "type":"ffff"
  },
  "_id":"amklam",
  "history":[],
  "addedon":"date"
},
{
  data :{ 
  _id:"adkcbbd",
  "type":"ffff"
  },
  "_id":"amklam",
  "history":[],
  "addedon":"date"
  }]

现在我想提取这些数据

{
  data :{ 
  _id:"adkabd",
  "type":"ffff"
  },
  "_id":"amklam",
  "history":[],
  "addedon":"date"
}

完全基于_id:"adkabd"

更新命令:

async.series(
                [
                    function(callback) { 
                        Models.DispatchOrder.update({'vehicle.data._id': criteria._id},
                        {$unset:{'vehicle.$':""}},
                         callback()
                        );  
                    },
                    function(callback){
                        Models.DispatchOrder.update(
                        {'vehicle': null},
                        {$pull: {'vehicle':null}},
                         callback()
                        );  
                    }
                ],
                function(err,resp){
                if(err)
                    callback(err)
                callback(resp)
                }
              );

error : Trace: ERROR OCCURED [ undefined, undefined ]

请暂时忽略括号。 目前在输出中我得到 ​​p>

data : null
"_id":"amklam",
"history":[],
"addedon":"date"

控制器中的代码:

var deleteVehicle = function(params, callbackRoute){
            var projection = {};
            var options = {limit: 1};
                var criteria = {
                    _id: params._id
                };

            Services.deleteDispatchVehicle(criteria, function (err, resp) {
                if (err) {
                    callbackRoute(err)
                } else {
                    if(resp.result.n === 0) 
                        return callbackRoute("Id not found");
                        callbackRoute(null, {});
                }
            })

        }

【问题讨论】:

  • 请注意,在 “正常” 事件的情况下,您的 "vehicle.data._id" 实际上是一个 “唯一” 值。你可以简单地做:Model.collection.update({'vehicle.data._id': "adkabd"},{ '$pull': { 'vehicle': { 'data._id': "adkabd" } })。由于您在两个数组元素中显示相同的数据,因此您 pull the first instance 而不是所有匹配的元素。
  • 我的坏人没有注意到_id 的值。 vehicle.data._id 是一个唯一值。我可以使用 $pull 删除数据部分,但它现在显示为 null 并且仍然显示 _id, history and addedon
  • 您的更新声明不正确。当你从错误的地方“拉”时,使用我给你的那个。该数组称为vehicle
  • 我已经用我更新的命令更新了这个问题,但又失败了。我用了你说的命令。
  • 第二个回调函数失败

标签: node.js mongodb mongoose


【解决方案1】:

这应该可以工作

Model.collection.update({'vehicle.data._id': params._id},
                        {$pull : {vehicle: {'data._id': params._id}},

【讨论】:

  • 仍然得到相同的输出:data: null, _id":"add",history:[],"addedon":"date" 我也更新了控制器部分的问题
猜你喜欢
  • 2016-05-04
  • 1970-01-01
  • 2017-01-25
  • 2014-12-17
  • 2012-11-01
  • 2011-12-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
相关资源
最近更新 更多