Пн goosejs обновление поддокумента - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь выстроить позицию субдокумента с помощью оператора $ set. Я видел похожий SO поток Пн goose найти / обновить вложенный документ . Моя модель показана ниже.

const mongoose = require('mongoose');

const positionSchema = new mongoose.Schema({

    posA: {
        type: Number,
    },

    posB: {
        type: Number,
    },

    date: {
        type: Date,
        default: Date.now
    }

}, { _id: false });

const LocationSchema = new mongoose.Schema({

    position: [positionSchema],

    username: {
        type: String,
        required: true
    },

}, { versionKey: false });

const Location = mongoose.model('Location', LocationSchema);

module.exports = Location;

Впервые документ создается в базе данных.

{
    "_id":{"$oid":"5e737eb7f0bdd67cf7521f6b"},
    "username":"username",
    "position":[{
        "posA":{"$numberInt":"123.855"},
        "posB":{"$numberInt":"45.8777"},
        "date":{"$date":{"$numberLong":"1584627688055"}}
    }]
}

Для обновления под-документа я использовал этот

const newPos = { posA: 76.66665, posB: 109.4455567 };

Location.findOneAndUpdate(
    { username: username},    // filter
    {
        "$set": {
            "position.$": newPos      // the new position added to the array
        }
    },
    (err, result) => {
        if (err) throw err;
        console.log(result);
});

Хотя я получаю сообщение об ошибке, и вложенный документ не добавляется в массив

MongoError: Оператор положения не нашел нужного соответствия в запросе.

Есть ли другой подход?

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Просто снимите «. $» После «position», и оно должно работать.

MongoDb не находит соответствия для позиционного оператора, потому что вы не определили его в своем запросе.

Но вам не нужно использовать позиционный оператор в этом случае.

РЕДАКТИРОВАТЬ: Также, если вы не хотите заменять исходный массив, используйте: $ pu sh вместо $ set

0 голосов
/ 19 марта 2020

для pu sh элемента в массиве попробуйте использовать $ pu sh вместо $ set

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...