Я пытаюсь выстроить позицию субдокумента с помощью оператора $ 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: Оператор положения не нашел нужного соответствия в запросе.
Есть ли другой подход?