mongodb $ addToSet _ добавление объекта не работает должным образом _ mongoose - PullRequest
1 голос
/ 14 июля 2020

согласно документации mongoDB о $ addToSet operator:

$ addToSet только гарантирует, что в набор не добавляются повторяющиеся элементы, и не влияет на существующие повторяющиеся элементы. $ addToSet не гарантирует определенного порядка элементов в модифицированном наборе.

, поэтому моя проблема:

У меня есть поле массива, которое содержит объектов .

foo = [ {a:1, b:2}, {a:3, b:2}]

поэтому, когда я пытаюсь поместить в него sh объекты, поведение не работает должным образом:

db.myCollection.updateOne({"some_id"}, {$addToSet:{foo:{a:1, b:2}}})

результат будет:

foo = [ {a:1, b:2}, {a:3, b:2}, {a:1, b:2}]

проверка на повторяющиеся объекты не работает. почему?

1 Ответ

1 голос
/ 14 июля 2020

@ Гиббс v3.6.8. это мой запрос: MyCollection.findOneAndUpdate ({package_name: req.body.package_name,}, {$ addToSet: {foo: {a: 2, b: 3},}}, {upsert: true, multi: true, new : true})

Потому что mon go считает 2 и 3 как Double по умолчанию. Следовательно, 2.0 не то же самое, что 2. Поэтому он вставляет.

// NumberInt решает проблему

Чтобы этого избежать,

db.getCollection('test').findOneAndUpdate({
  _id: ObjectId("5f0d7ab89e001b53e3995a5b")
},
{
  $addToSet: {
    foo: {
      a: NumberInt(2),
      b: NumberInt(3)
    }
  }
},
{
  upsert: true,
  multi: true,
  new: true
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...