admin管理员组文章数量:1321059
I'm fairly new to node js and mongoDB and I need to add or update a Subdocument on mongodb collection as follow :
{
"_id": "58286e49769e3729e895d239",
"id": "2",
"title": "Session Title",
"sessiondate": "2016-02-11T21:00:00.000Z",
"startTime": "14:30",
"endTime": "16:30",
"breakStartTime": "16:30",
"breakEndTime": "18:00",
"talks": [
{
"id": "3",
"title": "Android",
"speaker": {
"id": "1",
"name": "john doe",
"about": "about the speaker",
"photo": ".jpeg"
}
}
]
}
All the solutions I have found is using mongoose, where in this specific project we decided not to use mongoose, any thoughts?
I'm fairly new to node js and mongoDB and I need to add or update a Subdocument on mongodb collection as follow :
{
"_id": "58286e49769e3729e895d239",
"id": "2",
"title": "Session Title",
"sessiondate": "2016-02-11T21:00:00.000Z",
"startTime": "14:30",
"endTime": "16:30",
"breakStartTime": "16:30",
"breakEndTime": "18:00",
"talks": [
{
"id": "3",
"title": "Android",
"speaker": {
"id": "1",
"name": "john doe",
"about": "about the speaker",
"photo": "https://pbs.twimg./profile_images/566353055788978177/dUy_ueY2.jpeg"
}
}
]
}
All the solutions I have found is using mongoose, where in this specific project we decided not to use mongoose, any thoughts?
Share Improve this question asked Nov 23, 2016 at 8:28 Voice Of The RainVoice Of The Rain 5871 gold badge12 silver badges31 bronze badges2 Answers
Reset to default 9To add or update a new talk
in the embedded document, you can use any of the atomic update operators depending on how many documents in the collection
you want to update. For a single atomic update, use the updateOne()
method as in the following example:
1. Adding a new subdocument
// 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./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();
}
)
});
In the above, you use the $push
operator to append the specified document to an array of embedded documents (talks
field).
2. Updating an existing subdocument
// 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();
}
)
});
With an existing document update, you apply the $set
operator together with the $
positional operator in your update operation to change the embedded document fields. The $
positional operator will identify the correct element in the array to update without explicitly specifying the position of the element in the array. For this to work, the array field must appear as part of the query document, hence the query
{
"_id": ObjectId("58286e49769e3729e895d239"),
"talk.id": "3" // <-- array field is part of the query
}
Take a look at Node.JS MongoDB driver
Basic example
var Db = require('mongodb').Db,
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server,
ReplSetServers = require('mongodb').ReplSetServers,
ObjectID = require('mongodb').ObjectID,
Binary = require('mongodb').Binary,
GridStore = require('mongodb').GridStore,
Grid = require('mongodb').Grid,
Code = require('mongodb').Code,
BSON = require('mongodb').pure().BSON,
assert = require('assert');
// Set up the connection to the local db
var mongoclient = new MongoClient(new Server("localhost", 27017), {native_parser: true});
// Open the connection to the server
mongoclient.open(function(err, mongoclient) {
// Get the first db and do an update document on it
var db = mongoclient.db("integration_tests");
db.collection('mongoclient_test').update({a:1}, {b:1}, {upsert:true}, function(err, result) {
assert.equal(null, err);
assert.equal(1, result);
// Get another db and do an update document on it
var db2 = mongoclient.db("integration_tests2");
db2.collection('mongoclient_test').update({a:1}, {b:1}, {upsert:true}, function(err, result) {
assert.equal(null, err);
assert.equal(1, result);
// Close the connection
mongoclient.close();
});
});
});
本文标签: javascriptAdd and update subdocument in mongoDB and node js (without mongoose)Stack Overflow
版权声明:本文标题:javascript - Add and update subdocument in mongoDB and node js (without mongoose) - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742092440a2420347.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论