删除Meteor / MongoDB中的数组对象

时间:2018-05-04 03:12:19

标签: mongodb meteor

我试图删除数组中的Object,我在Meteor.update中尝试了pull和unset,但是整个数组都被删除了,而不仅仅是数组中的单个对象。

我尝试过的代码

Cars.update( 
    { _id: id},
    { $unset: { 'models': { '$.id': modelId  }  } })

Cars.update( 
{ _id: id},
{ $pull: { 'models': { 'id': modelId  }  } })

在这两种情况下,整个'模型'删除了属性,而不仅仅是数组中的对象

汽车架构:

models : {
type: [Object],
optional: true
},

'models.$.id': {
type: String,
autoValue: function() {
    return Meteor.uuid()
},
optional: true
}

基本上,收藏品'汽车'包含一个阵列'模型'这是一个对象数组(汽车模型)。每个汽车模型对象都有一个属性id。我想使用属性' id'从models数组中删除单个汽车模型。但我上面的尝试删除了整个'模型'数组而不是单个对象。任何帮助,将不胜感激。感谢

{
"_id" : "XxbKzS6GHthxwnLFq",
"createdAt" : ISODate("2018-05-04T08:05:59.151Z"),
"updatedAt" : ISODate("2018-05-04T08:36:11.785Z"),
"models" : [ 
    {
        "name" : "Mercedes",
        "id" : "9927cfe1-f5ae-4625-b6eb-87868793a229"
    }, 
    {
        "name" : "BMW",
        "id" : "86f24e9d-dd08-4407-b350-63d9b25dc094"
    }
]
}

{
"_id" : "XxbKzS6GHthxwnLFq",
"createdAt" : ISODate("2018-05-04T08:05:59.151Z"),
"updatedAt" : ISODate("2018-05-04T09:38:56.470Z")
}

父对象是XxbKz ...它包含一个属性模型,它是一个对象数组(宝马,梅赛德斯)。我想从XxbKz父对象中删除BMW对象。我使用其id(XxbKz ...)和使用其id(86f2 ...)的BMW对象(原始帖子中的代码)查询父对象。结果是整个模型阵列被删除(宝马和梅赛德斯),而不仅仅是宝马。

我的流星电话是

Meteor.call('deleteCar','XxbKzS6GHthxwnLFq','86f24e9d-dd08-4407-b350- 
    63d9b25dc094') 

deleteCar(carId, modelId) {
check(carId, String)
check(modeld, String)
if (Meteor.isServer) {
    let car = Cars.update( {_id: carId},
      { $pull: { 'models': { 'id': modelId  }  } }
    )   
    console.log(car)
    return car
  }
}

}

deleteCar函数中的变量是carId(XxbK)和modelId(86f2),它们是deleteCar meteor调用的第一个和第二个参数。根据我的理解,只有父母的宝马应该被删除,但由于某种原因,情况并非如此

1 个答案:

答案 0 :(得分:1)

这可以从你的例子中删除梅赛德斯。

db.cars.update({_id: 'XxbKzS6GHthxwnLFq'}, {$pull: {models: {id: '9927cfe1-f5ae-4625-b6eb-87868793a229'}}})

看起来就像

 Cars.update( 
{ _id: id},
{ $pull: { 'models': { 'id': modelId  }  } })

我确实是从mongo shell运行的,而不是meteor。但是我在Meteor中使用了$ pull没问题。

我从未使用过返回更新,它可能会在更新之前返回原始文档。我会添加它。

Cars.update( {_id: carId},
      { $pull: { 'models': { 'id': modelId  }  } }
    )       
const car = Cars.findOne(carId)
console.log(car)
return car
祝你好运,让我知道你是怎么过的。