Node.js 如何使用节点将i$推送到mongoDB数据库中数组中的对象?

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');

我想将一个对象推送到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
对象)是操作。使用
提交。$.subjects
操作将在文档的这个特定部分完成

我没有在Node中测试它,但是您的代码有
myquery
newvalues
变量,所以它应该是相同的,并且可以工作


顺便说一句,我已经回答了查询

我按照你说的做了,没有出现任何错误,但数据库中没有显示任何内容。我应该已经在数据库中设置了数组和对象,以便它工作,还是由它自动创建?它必须存在,因为查询会更新与第一个对象匹配的元素(username和submits.date)。因此,如果未找到任何元素,则不会更新任何元素。我如何检查它是否不存在,然后该怎么做?请告诉我如何首先创建它:)它不会神奇地进入数据库,我不知道如何首先进入数据库。当我尝试时,它会在我想要添加的对象之间添加随机对象。我如何在数据库上创建一个对象,然后用您提供的代码添加到该对象中。请耐心等待。如果您使用的是Node,您可以选择使用方法
insertOne()
插入多个()
。您可以检查