Node.js 如何使用节点将i$推送到mongoDB数据库中数组中的对象?
我想将一个对象推送到MongoDB数据库数组中的一个对象。我试图使用$push submits[postDate],但它在第一个“[”下给了我一条红线。你知道如何解决这个问题吗 我的代码:Node.js 如何使用节点将i$推送到mongoDB数据库中数组中的对象?,node.js,arrays,json,mongodb,express,Node.js,Arrays,Json,Mongodb,Express,我想将一个对象推送到MongoDB数据库数组中的一个对象。我试图使用$push submits[postDate],但它在第一个“[”下给了我一条红线。你知道如何解决这个问题吗 我的代码: app.post('/add-submit', (req,res) => { let postDate = new Date(); let dd = String(postDate.getDate()).padStart(2, '0');
app.post('/add-submit', (req,res) => {
let postDate = new Date();
let dd = String(postDate.getDate()).padStart(2, '0');
let mm = String(postDate.getMonth() + 1).padStart(2, '0');
let yyyy = postDate.getFullYear();
postDate = mm + '/' + dd + '/' + yyyy;
subject = req.body.subject
let pushValue = {
time: req.body.time,
description: req.body.description,
date: postDate
}
console.log(pushValue)
console.log(postDate)
let myquery = { username: req.body.username};
let newvalues = {
$push : {
submits[postDate] : {
[subject] : pushValue
}
}
}
db.collection("users").updateOne(myquery, newvalues, (err, response) => {
if (err) throw err;
console.log("1 document updated");
res.redirect('/users/'+req.body.id)
});
})
但我得到了这个错误:
D:\Users\willi\Documents\Node\StudyWebApp\server.js:186
submits[postDate] : {
^
SyntaxError: Unexpected token '['
at wrapSafe (internal/modules/cjs/loader.js:1053:16)
at Module._compile (internal/modules/cjs/loader.js:1101:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
at Module.load (internal/modules/cjs/loader.js:985:32)
at Function.Module._load (internal/modules/cjs/loader.js:878:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
[nodemon] app crashed - waiting for file changes before starting...
这就是我希望它在数据库中的外观:
谢谢。您的对象模型不太清楚,但我认为您需要使用
$
关键字
要在“提交”中获得职位,您可以尝试submit[postDate]
,但没有正确的方法,您需要这样的方法:
db.collection.update({
"username": "test",
"submits.date": "16/10/2020"
},
{
$push: {
"submits.$.subjects": {
"subjectName": {
"time": "1234",
"description": "desc"
}
}
}
})
我会尽力解释它的工作原理,它很简单
第一个对象是您要“指向”的位置。就像“查找”一样,是您要执行第二部分(推送)的位置。因此,使用$
操作符,您将处理文档的确切部分
因此,第二个对象($push
对象)是操作。使用提交。$.subjects
操作将在文档的这个特定部分完成
我没有在Node中测试它,但是您的代码有myquery
和newvalues
变量,所以它应该是相同的,并且可以工作
顺便说一句,我已经回答了查询我按照你说的做了,没有出现任何错误,但数据库中没有显示任何内容。我应该已经在数据库中设置了数组和对象,以便它工作,还是由它自动创建?它必须存在,因为查询会更新与第一个对象匹配的元素(username和submits.date)。因此,如果未找到任何元素,则不会更新任何元素。我如何检查它是否不存在,然后该怎么做?请告诉我如何首先创建它:)它不会神奇地进入数据库,我不知道如何首先进入数据库。当我尝试时,它会在我想要添加的对象之间添加随机对象。我如何在数据库上创建一个对象,然后用您提供的代码添加到该对象中。请耐心等待。如果您使用的是Node,您可以选择使用方法
insertOne()
或插入多个()
。您可以检查