Чтобы добавить или обновить во встроенном документе нового talk
, вы можете использовать любого из атомной update operators в зависимости от того, как много документов в коллекции вы хотите обновить. Для одного атомного обновления, используйте метод updateOne()
, как в следующем примере:
1. Добавление нового вложенного
// Example of adding a subdocument to an existing document.
var MongoClient = require('mongodb').MongoClient,
ObjectId = require('mongodb').ObjectId;
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
// Get a collection
var collection = db.collection('mycollection');
// The new talk document to be added
var doc = {
"id": "4",
"title": "PyData",
"speaker": {
"id": "7",
"name": "alice bob",
"about": "about the speaker",
"photo": "https://pbs.twimg.com/dUy_ueY2.jpeg"
}
};
// Update the document with an atomic operator
collection.updateOne(
{ "_id": ObjectId("58286e49769e3729e895d239") },
{ "$push": { "talks": doc } },
function(err, result){
console.log(result);
db.close();
}
)
});
В приведенном выше, можно использовать $push
оператор для добавления указанный документ в массив встроенных документов (talks
).
2. Обновление существующего поддокумент
// Example of updating an existing subdocument.
var MongoClient = require('mongodb').MongoClient,
ObjectId = require('mongodb').ObjectId;
MongoClient.connect('mongodb://localhost:27017/test', function(err, db) {
// Get a collection
var collection = db.collection('mycollection');
// Update the document with an atomic operator
collection.updateOne(
{
"_id": ObjectId("58286e49769e3729e895d239"),
"talk.id": "3"
},
{ "$set": {
"talks.$.title": "Android version 7.0",
"talks.$.speaker.name": "foo bar"
} },
function(err, result){
console.log(result);
db.close();
}
)
});
С существующего обновления документа, вы применяете $set
оператора вместе с $
positional operator в вашей операции обновления для изменения встроенных полей документа. $
positional operator идентифицирует правильный элемент в массиве для обновления без явного указания положения элемента в массиве. Для этого, чтобы работать, поле массива должно выглядеть как часть документа запроса, следовательно запрос
{
"_id": ObjectId("58286e49769e3729e895d239"),
"talk.id": "3" // <-- array field is part of the query
}
Спасибо за разъяснения, однако я не получаю именно то, что {а: 1}, {Ь: 1 }, и то же самое появляется в документации https://mongodb.github.io/node-mongodb-native/api-generated/collection.html#update, я действительно сбрасываю! –
Как показывает мой пример, мне нужно добавить новый разговор или обновить существующий. –