Я пытаюсь удалить объект внутри массива, я пробовал как тянуть, так и сбрасывать в Meteor.update, но удаляется весь массив, а не только отдельный объект внутри массива.
Код для того, что я пробовал
Cars.update(
{ _id: id},
{ $unset: { 'models': { '$.id': modelId } } })
И
Cars.update(
{ _id: id},
{ $pull: { 'models': { 'id': modelId } } })
В обоих случаях весь атрибут 'models' был удален, а не просто объект из массива
Схема для автомобилей:
models : {
type: [Object],
optional: true
},
'models.$.id': {
type: String,
autoValue: function() {
return Meteor.uuid()
},
optional: true
}
По сути, коллекции 'Cars' содержат массив 'models', который представляет собой массив объектов (моделей автомобилей). Каждый объект модели автомобиля имеет атрибут 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 ... и он содержит атрибут модели, представляющий собой массив объектов (BMW, Mercedes). Я хочу удалить объект BMW из родительского объекта XxbKz. Я запросил родительский объект, используя его идентификатор (XxbKz ...) и объект BMW, используя его идентификатор (86f2 ...), а также (код в оригинальном сообщении). В результате был удален весь массив моделей (как BMW, так и Mercedes), а не только 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. Насколько я понимаю, только BMW от родителя должен был быть удален, но по какой-то причине это не так