Как вставить новое значение во вложенный массив в Mongoose - PullRequest
3 голосов
/ 10 июля 2019

Я использую Mongoose.Как я могу вставить новое значение в массив fixture2?

Это моя коллекция.Я использую userHash для идентификации этого документа.

{
    "_id" : ObjectId("5d2548beb1696f1a2d87d647"),
    "userHash" : "5c4b52fc2dfce2489c932e8fcd636a10",
    "fixtures" : [ 
        {
            "fixture1" : [ 
                "vote1", 
                "vote2"
            ],
            "fixture2" : [ 
                "vote1", 
                "vote2", 
                "vote3"
            ],
            "fixture3" : [ 
                "vote1"
            ]
        }
    ],
    "__v" : 0
}

fixtures может иметь любое количество элементов.В этом случае у него всего 3.

И это моя модель.

var mongoose = require( 'mongoose' );
var votesSchema = mongoose.Schema({
  userHash: String, 
  fixtures: [{}]
});
module.exports = mongoose.model('votes', votesSchema);

Но я изо всех сил пытаюсь увеличить значение vote4 до fixture2.Можно ли это сделать, используя findOneAndUpdate?

Ответы [ 3 ]

1 голос
/ 10 июля 2019

Вы можете использовать ниже запрос

update(
  { "fixtures.fixture2": { "$exists": true } },
  { "$push": { "fixtures.$.fixture2": "vote4" } }
)
1 голос
/ 10 июля 2019

Вы можете использовать $ (обновление) позиционный оператор для достижения этого.

Кроме того, не забудьте использовать {multi : true} в параметрах обновления, чтобы обновить все documents в вашей коллекции.

Попробуйте это:

Votes.update(
  { "fixtures.fixture2": { "$exists": true } },
  { "$push": { "fixtures.$.fixture2": "vote4" } },
  { multi : true}
)

Но это будет обновлять только первое подходящее устройство 2.

Чтобы обновить fixture2 всех элементов fixtures массив, вы можете вместо этого использовать $[].

Попробуйте это:

Votes.update(
  { "fixtures.fixture2": { "$exists": true } },
  { "$push": { "fixtures.$[].fixture2": "vote4" } },
  { multi : true}
)

Подробнее о $ [] (positional-all) дляподробная информация.

1 голос
/ 10 июля 2019

Вы можете использовать $push для этого.

Пример:

YourModel.findOneAndUpdate(condition, {$push: {"fixtures.0.fixture2": "vote4"}})
...