【发布时间】: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 -
我已经用我更新的命令更新了这个问题,但又失败了。我用了你说的命令。
-
第二个回调函数失败