簡體   English   中英

我如何使用節點 $push 到 mongoDB 數據庫中數組中的對象?

[英]How do i $push to a object in an array in a mongoDB database with node?

我想將一個對象推送到我的 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...

這就是我希望它在數據庫中的樣子:

mongodb 數據庫

謝謝。

您的對象模型不是很清楚,但我認為您需要使用$關鍵字。

要獲得“提交”中的位置,您可以嘗試submit[postDate]但沒有正確的方法,相反,您需要這樣的東西:

db.collection.update({
  "username": "test",
  "submits.date": "16/10/2020"
},
{
  $push: {
    "submits.$.subjects": {
      "subjectName": {
        "time": "1234",
        "description": "desc"
      }
    }
  }
})

我將嘗試解釋它的工作原理,它非常簡單。

第一個對象是您要“指向”的位置。 就像一個“查找”,你想做第二部分(推送)的地方。 因此,使用$運算符,您將在文檔的確切部分工作。

所以,第二個對象( $push對象)是操作。 使用submits.$.subjects操作將在文檔的這個特定部分完成。

我沒有在 Node 中測試過它,但你的代碼有myquerynewvalues變量,所以它應該是相同的並且可以工作。

順便說一句,我已經在這里回復了查詢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM