2017-02-20 121 views
0

我想推送一個值到MongoDB集合arrayList(user.completed),但它並沒有得到更新,即使我的代碼似乎是正確的。推送項目到Mongodb集合數組

當我進行API調用時,值正在傳遞,但是「$ push」沒有爲完成的數組添加值!我在這裏錯過了什麼?

當我嘗試推動值到一個字符串,我得到預期的貓鼬錯誤。但是,當我嘗試將值推送到未定義的鍵('abc')時,不會像mongodb文檔建議的那樣創建新數組!不知道這裏發生了什麼!

// MongoDB的數據

{ 
"_id" : ObjectId("58aa2eb1de7b414237b93981"), 
"email" : "[email protected]", 
"firstName" : "test", 
"completed" : [], 
"playing" : [], 
"__v" : 2 

// API

import mongoose from 'mongoose' 
import { Router } from 'express' 
import User from './../model/user' 

api.put('/completed/:id', (req, res) => { 
    User.update(
     { "_id": req.params.id }, 
     { "$push": { 
      "completed": req.body.completed 
     }} 
    ) 
    .then(doc => res.send(doc), err => res.status(400).send(err)) 
}) 

//請求

var request = require("request"); 

var options = { 
    method: 'PUT', 
    url: 'http://localhost:8008/v1/user/completed/58aa2eb1de7b414237b93981', 
    headers: { 
     'content-type': 'application/json' }, 
     body: { completed: { game: 'A', player: 'B' } }, 
     json: true 
    }; 

    request(options, function (error, response, body) { 
     if (error) throw new Error(error); 
     console.log(body); 
    }); 
+1

請問您可以添加用戶mongoose模式的問題? –

+0

你確定它現在有效嗎? req.params.id是一個字符串,你需要查詢ObjectId。 –

+0

更新並回答了我自己的問題...感謝您對其進行調查 – rex

回答

0

發現的問題!我重構了代碼,但沒有更改用戶模型。除了用戶模型之外,我在所有地方都將「gamesCompleted」更改爲「completed」。因此,查詢失敗。我希望,貓鼬會給我一個更好的錯誤,那麼剛剛【OK:0,N:0,n修改:0}

1

使用$addToSet停止同一數據的重複陣列中

$addToSet將不添加項目,如果它已包含它,但$push會將給定的值添加到字段,無論它是否存在。

User.update({ "_id": req.params.id }, 
    { $addToSet: { "completed": req.body.completed } }, function (err, d) { 
     if (!d.nModified) { 
      // same value entered won't add to the array 
     } else { 
      // new value entered and will add to the array 
     } 
}); 
+0

感謝您的提示...將確保將$ push替換爲$ addToSet – rex