gpt4 book ai didi

node.js - MongoDB - Mongoose 数组从文档中提取

转载 作者:太空宇宙 更新时间:2023-11-04 00:59:39 24 4
gpt4 key购买 nike

我对 mongoose 的 pull 方法有点困惑,你只能通过 objectID 来拉取,还是只需要通过数据模型中的值来拉取?

无论哪种方式,我都无法从数组中删除元素。

以下是模型:

var fieldSchema = new Schema({
'name' : String,
'value' : String
});

var formSchema = new Schema({
'name' : String,
'fields' : [fieldSchema]
});

var userSchema = new Schema({
'email' : String,
'firstName' : String,
'lastName' : String,
'application' : [formSchema]
});

var fieldModel = mongoose.model('field',fieldSchema);
var formModel = mongoose.model('form',formSchema);
var userModel = mongoose.model('user',userSchema);

代码(数据库中只有一个文档,这就是 findOne 没有参数的原因):

userModel.findOne({}, function (err, user) {
if (err) return handleError(err);

var edit = false;

for(i in user.application) {
if(user.application[i].name == submit.name) {
edit = true;

user.application.pull({'name':submit.name}); //is this valid?
user.application.push(submit);
}
}
console.log(edit);
if(!edit) {
user.application.push(submit);
}

user.save(function(err, doc, numAffected) {
if (err) console.log(err);
else {
console.log('number of rows: ' + numAffected);
doc.save();
}
});

});

数据库中的文档:

"_id" : ObjectId("5490f0cdd059b4cdb6bdf7d2"),
"email":"test@test.com",
"firstName":"tester",
"lastName":"tester",
"application" : [
{
"name" : "Contact",
"fields" : [
{
"field_name" : "New field - 1",
"field_value" : "kkkkkkk"
}
]
}
],

最佳答案

使用下面的代码更改您的第二个代码,不允许使用您使用的pull,因为user.application是javascript数组,并且没有pull方法可以从数组中删除元素。您可以在mongoDB查询中使用$pull,在这种情况下不建议使用for(i in user.application)也是

userModel.update({'application.name':submit.name},{$push:{application:submit}},function (err, user) {
if(user===0){
userModel.update({},{$push:{application:submit}},function(){

})
}

});

关于node.js - MongoDB - Mongoose 数组从文档中提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27568438/

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