Node.js $pull-in-MongoDb未按预期工作
我有一个数组,我正试图根据Node.js $pull-in-MongoDb未按预期工作,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个数组,我正试图根据\u id删除数据,但部分数据被拉出,并填充NULL值来代替该值 排列 vehicle : [ { data :{ _id:"adkabd", "type":"ffff" }, "_id":"amklam", "history":[], "addedon":"date" }, { data :{ _id:"adkcbbd", "type":"ffff" }, "_id":"amklam", "history":[]
\u 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"
}
完全基于\u 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)
}
);
错误:跟踪:发生错误[未定义,未定义]
请暂时忽略括号。
目前在我得到的输出中
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, {});
}
})
}
这应该行得通
Model.collection.update({'vehicle.data._id': params._id},
{$pull : {vehicle: {'data._id': params._id}},
仍然得到相同的输出:
data:null,\u id:“add”,history:[],“addedon”:“date”
我已经用控制器部分更新了这个问题,注意在事件的“正常”情况下,您的“vehicle.data.\u id”
实际上是一个“唯一”值。您只需执行以下操作:Model.collection.update({'vehicle.data._id':“adkabd”},{'pull':{'vehicle':{'data._id':“adkabd”})
。由于您显示的数据在两个数组元素中都相同,因此您比所有匹配元素都要快。我的坏朋友没有注意到\u id
的值。车辆.data.\u id
是唯一的值。我可以使用$pull删除数据部分,但它现在显示为null,\u id,history和addedon
为空仍然显示您的更新语句不正确。使用我给您的语句,因为您正在从错误的位置“拉动”。数组名为vehicle
我已使用更新的命令更新问题,该命令再次失败。我使用了您告诉的命令。它在第二个回调函数中失败