Node.js 在MongoDB中动态添加具有相同密钥名的新字段
我试图以一种动态的方式在我的一个收藏中创建一个列表,下面是一个例子Node.js 在MongoDB中动态添加具有相同密钥名的新字段,node.js,mongodb,mongoose,nosql,Node.js,Mongodb,Mongoose,Nosql,我试图以一种动态的方式在我的一个收藏中创建一个列表,下面是一个例子 var user = mongoose.Schema({ "NAME": String, "LAST": String, "EMAIL": String, "TasksUploaded": {} }) 我想在mongoose中做的是用用户已经上传的任务更新用户,最好的方法是什么?最后我想要的是: { "Name" : "John", "Last" : "Doh", "Email" : "john@doh
var user = mongoose.Schema({
"NAME": String,
"LAST": String,
"EMAIL": String,
"TasksUploaded": {}
})
我想在mongoose中做的是用用户已经上传的任务更新用户,最好的方法是什么?最后我想要的是:
{
"Name" : "John",
"Last" : "Doh",
"Email" : "john@doh.com",
"TasksUploaded" : {
"Task" : "Task A"
"Task" : "Task B"
"Task" : "Task H"
"Task" : "Task F"
"Task" : "Task C"
}
}
正如您所看到的,任务并不总是连续的,用户可以根据自己的需要上传任务
我对所有这些新的NoSQL和MongoDB都是新手,所以如果你能告诉我什么是最佳实践,我将不胜感激
这是我目前更新它的方式,但是发生的是“级别”被替换,并且y需要在文档中添加新行
User.findOneAndUpdate({ _id: id}, { $set: { 'TasksUploaded.Task': req.body.task} }, { returnNewDocument: true, new: true }, function (err, result) {
if (err) {
console.log("Error saving task: " + err);
return;
}
console.log(result);
})
}
不,那是不可能的。一个对象中不能有多个同名键。想象一下,你会怎么称呼他们 看来您需要重新构造数据并使用数组。多亏了@Sam 我修改了结构,以数组的形式添加上传任务
tasksupload[“TaskA”、“TaskB”、“TaskC”]
谢谢你你建议怎么做?我所想到的也是这样做的
{“Name”:“John”,“Last”:“Doh”,“Email”:john@doh.com“,”TasksUploaded“:{“任务A”:真“任务B”:真“任务H”:真“任务F”:真“任务C”:真}
@mandaman2k它可以作为TasksUploaded[“任务A”、“任务B”、“任务C”]单反勾号用于内联代码。不要将它们用于多行代码块。使用4个空格的缩进或三个反勾号(也称为代码围栏)