mongodb извлекает объект из массива, не работающего с помощью mongoose - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь удалить объект комментария из массива в mongodb, используя оператор $ pull, и мне кажется, что у меня правильный синтаксис, но он ничего не меняет.

Я просмотрел все примеры, приведенные в стеке, но он все еще продолжает отвечать

{ n: 0,
nModified: 0,
opTime:
{ ts:
  Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1548664023 },
 t: 1 },
electionId: 7fffffff0000000000000001,
ok: 1,
operationTime:
 Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1548664023 },
'$clusterTime':
 { clusterTime:
  Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1548664023 },
  signature: { hash: [Binary], keyId: [Long] } } }

, это поле, которое у меня есть в базе данных

 {
"_id" : ObjectId("5be23d8aa365d853ddfd6f15"),
"__v" : 0,
"restaurant" : {
    info about restaurant
},
"comments" : [
    {
        "id" : "61DSLu7fFcUZ2chA8-A6HQ",
        "user" : "test",
        "comment" : "test"
    },
    {
        "comment" : "testing",
        "user" : "testing",
        "id" : ObjectId("5c3cd3a5647f180484a5ca18")
    },
    {
        "restaurant_id" : "61DSLu7fFcUZ2chA8-A6HQ",
        "comment" : "tacos",
        "name" : "test",
        "user_id" : ObjectId("5c48fdf47e9ed81b08536602")
    },
    {
        "restaurant_id" : "61DSLu7fFcUZ2chA8-A6HQ",
        "comment" : "tacos",
        "name" : "test",
        "comm_id" : ObjectId("5c49019f8528f31b2adfb914")
    },
    {
        "restaurant_id" : "61DSLu7fFcUZ2chA8-A6HQ",
        "comment" : "hello",
        "name" : "test",
        "comm_id" : ObjectId("5c490237fd6e781b52f801fe")
    }
],
"likes" : {
    "likes" : 6
}

В настоящее время моя модель показывает в моей модели ресторанов

comments: [{
    restaurant_id : String,
    comment : String,
    name : String,
    comm_id : String,
  }]

метод обновления, который у меня есть

db.restaurants.updateOne({restaurant_id: rest_id},
    { $pull: { comments: { $in: [{comment: "hello"}] } }
  }, { safe: true })

, а также пробовал

db.restaurants.updateOne({restaurant_id: rest_id},
    { $pull: { comments: { $in: {"comment": "hello"} } }
  }, { safe: true })

, а также

db.restaurants.updateOne({restaurant_id: rest_id},
    { $pull: { comments: { comment: "hello"} } }
 }, { safe: true })

и аналогичные варианты.Я не могу точно определить свою ошибку.ответ кажется, что он находит правильное поле ресторана, но мой оператор $ pull просто не работает должным образом.Что-то не так с моим синтаксисом или он не работает в этом сценарии.

В идеале я буду использовать поле comm_id для удаления объекта из массива, но я использую комментарий: "привет" просто для проверки.

Возможно, потому что у меня есть несколько полей в первых нескольких комментариях?

1 Ответ

0 голосов
/ 28 января 2019

сделать это просто, это будет работать

db.restaurants.updateOne({restaurant_id: rest_id},
    { $pull: { comments.comment: "hello"}  }
 }, { safe: true })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...