mongodb - 在 Meteor/MongoDB 中删除数组对象
问题描述
我正在尝试删除数组中的一个对象,我在 Meteor.update 中尝试了拉取和取消设置,但是整个数组被删除,而不仅仅是数组中的单个对象。
我尝试过的代码
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”从模型数组中删除单个汽车模型,但我上面的尝试删除了整个“模型”数组而不是单个对象。任何帮助,将不胜感激。谢谢
前
{
"_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...,它包含一个属性模型,它是一个对象数组(BMW,Mercedes)。我想从 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 流星调用的第一个和第二个参数。据我了解,应该只删除父母的宝马,但由于某种原因,情况并非如此
解决方案
这可以从您的示例中删除梅赛德斯。
db.cars.update({_id: 'XxbKzS6GHthxwnLFq'}, {$pull: {models: {id: '9927cfe1-f5ae-4625-b6eb-87868793a229'}}})
看起来就像
Cars.update(
{ _id: id},
{ $pull: { 'models': { 'id': modelId } } })
我确实从 mongo shell 而不是流星运行了这个。但是我在 Meteor 中使用了 $pull 没问题。
我从未使用过返回更新,它很可能是在更新之前返回原始文档。我会添加这个。
Cars.update( {_id: carId},
{ $pull: { 'models': { 'id': modelId } } }
)
const car = Cars.findOne(carId)
console.log(car)
return car
祝你好运,让我知道你过得怎么样。
推荐阅读
- c++ - GTKMM:如何将键盘事件附加到绘图区?
- javascript - 动态导入图像(React Js)(需要 img 路径找不到模块)
- python - pytorch 模型的 Coreml 模型浮点输入
- javascript - 由于某种原因,每个用户会记录两次可投票的投票
- delphi - 如何仅在 fkData 上应用 TClientDataSet StatusFilter
- ruby - 错误的参数类型 nil(预期的字符串)(TypeError)
- python - 用numpy linalg lstsq曲线拟合复杂方程
- c++ - 带有接口和默认实现的 C++ 继承
- c# - C# - 代理检查问题
- css - 更改 HTML 溢出