cuốn sách gpt4 ai đã làm

node.js - MongoDB:如何使用 Mongoose 添加或更新子文档?

In lại Tác giả: Hồ Xil 更新时间:2023-11-01 09:55:14 28 4
mua khóa gpt4 Nike

我正在尝试添加一个新的或更新一个现有的 SubDocument,这是基于它的存在。

给出的是以下架构:

var providerSchema = new Schema({
provider: String,
id: String,
accessToken: Object
})

var userSchema = new Schema({
email: { type: String },
provider: [providerSchema],
created_at: Date,
updated_at: Date
});

存储以下文档:

    {
"_id": {
"$oid": "5629f57b13bc066c17b88a0d"
},
"created_at": {
"$date": "2015-10-23T08:53:15.684Z"
},
"updated_at": {
"$date": "2015-10-23T08:53:15.684Z"
},
"email": "123123123@gmail.com",
"provider": [
{
"provider": "facebook",
"id": "123123",
"accessToken": {
"expires_in": 123123,
"token_type": "bearer",
"access_token": "123123123"
},
"_id": {
"$oid": "5629f57b13bc066c17b88a0e"
}
},
{
"accessToken": {
"access_token": "123123",
"token_type": "bearer",
"uid": "123123"
},
"id": "123123",
"provider": "dropbox",
"_id": {
"$oid": "5629f58813bc066c17b88a12"
}
}
],
"__v": 0
}

我正在尝试使用以下代码更新或添加新的 SubDocument:

User.findOneAndUpdate({email: email},
{
"$push" : {
"provider": {
"provider": "dropbox",
"id": "123441212",
"accessToken": "sdasddad"
}
}
}, function (error, doc) {
....
}});

很遗憾,现有的子文档未更新,但创建了新的子文档。

你能帮帮我吗?

Cảm ơn trước!

附言是否可以命名子文档?因此,例如有一个名为“facebook”的子文档,可以通过名称直接访问?

--- 解决方案 ---

User.findOne(
{"email": email})
.populate("provider")
.exec(function (err, data) {
if(data === null && typeof data === "object"){
// Create User
user.save(function (error) {
if(error) return callback(new Error(error), null);
return callback(null, user);
})
} khác {
//
if(err) return callback(new Error(err), null);

var prov = _.findWhere(data.provider, { "provider": provider });

if(typeof variable_here === 'undefined'){
data.provider.push(update);
} khác {
_.extend(prov, update);
}

data.save(function (error) {
if(error) {
return callback(error, null);
} khác {
return callback(null, data);
}
});
}
}
);

谢谢,Hossein Gerami!仍然有很多退路......

(一开始我对“_.findWhere”感到困惑;它是下划线;只需通过“npm install underscore --save”安装并将以下行放入您的文件“var _ = require('underscore');”)

câu trả lời hay nhất

考虑 students 集合中的以下文档,其 grades 元素值为嵌入文档的数组:

    {
_id: 4,
grades: [
{ grade: 80, mean: 75, std: 8 },
{ grade: 85, mean: 90, std: 5 },
{ grade: 90, mean: 85, std: 3 }
]
}

使用位置 $ 运算符更新等级为 85 的嵌入文档中的 std 字段的值:

    db.students.update(
{ _id: 4, "grades.grade": 85 },
{ $set: { "grades.$.std" : 6 } }
)

下面的代码是下面更新的完整语法,如果您将 upsert 定义为 true,它将插入新记录,否则它将被更新。默认值:假

            db.collection.update(
,
,
{
upsert: ,
multi: ,
writeConcern:
}
)

关于node.js - MongoDB:如何使用 Mongoose 添加或更新子文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33299536/

28 4 0
Hồ Xil
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress