我试图删除数组中的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调用的第一个和第二个参数。根据我的理解,只有父母的宝马应该被删除,但由于某种原因,情况并非如此
答案 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
祝你好运,让我知道你是怎么过的。