node.js - 我如何 $push 到带有节点的 mongoDB 数据库中的数组中的对象?
问题描述
我想将一个对象推送到我的 MongoDB 数据库上一个数组中的一个对象。我正在尝试使用 $push submits[postDate] 但它在第一个 "[" 下给了我一条红线。知道如何解决这个问题吗?
我的代码:
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
object)就是操作。使用submits.$.subjects
该操作将在文档的此特定部分完成。
我没有在 Node 中测试过它,但是你的代码有myquery
和newvalues
变量,所以它应该是相同的并且可以工作。
顺便说一句,我在这里回答了查询
推荐阅读
- java - H2 设置 - 找不到主类:org.h2.tools.Console
- linux - 在默认的 tomcat8 linux 安装中声明的 catalina.base 系统属性在哪里
- elasticsearch - 如何使用 filebeat 使用两个 JSON 格式的日志文件存储在两个索引中并输出到 elasticsearch
- javascript - 构建 vuejs 应用程序不会正确构建相对文件引用
- python - Python - 从不同项目导入类
- java - LogBack 记录到文件但无法登录到控制台(wildfly 10)
- reactjs - 无法从 CSS 模块转换中跳过 3rd 方库 CSS
- android - 如何在 SQLite db 中搜索多个列?
- python - Python copy files script
- docker - 如何告诉 Mac 上的 docker 出于所有目的使用主机网络?