gpt4 book ai didi

javascript - 在 mongoDB 和 node js 中添加和更新子文档(没有 mongoose)

转载 作者:可可西里 更新时间:2023-11-01 09:58:47 26 4
gpt4 key购买 nike

我是 node js 和 mongoDB 的新手,我需要在 mongodb 集合上添加或更新子文档,如下所示:

{
"_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.com/profile_images/566353055788978177/dUy_ueY2.jpeg"
}
}
]
}

我找到的所有解决方案都使用 Mongoose ,在这个特定项目中我们决定不使用 Mongoose ,有什么想法吗?

最佳答案

要在嵌入文档中添加或更新新的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
}

关于javascript - 在 mongoDB 和 node js 中添加和更新子文档(没有 mongoose),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40759320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com