以编程方式修改现有的mongo文档

时间:2013-07-11 23:20:17

标签: node.js mongodb coffeescript

已解决,问题在于PUT请求,我必须正确指定标题,然后一次继续。

curl -X PUT -H "Accept: application/json" -d "prenom=Maxwell" localhost:3000/contact/51df5cec5e88a2bbce7fac05

我正在尝试在我正在尝试的node.js应用程序中通过coffeescript修改mongodb文档,当我尝试时:

 curl -X PUT -d '{"nom": "House", "prenom": "Maxwell"}' localhost:3000/contact/51ddb907ae3267d6154a3e64

在此

{
  "_id": "51ddb907ae3267d6154a3e64",
  "archive": 1,
  "nom": "Bir",
  "prenom": "Sim"
}

ID和路由都是正确的,所以我很确定错误在于javascript逻辑,但我似乎无法抓住正确的角度去工作。这是有缺陷的代码:

   exports.modifyContact = (req, res) ->
     db.collection "data-center", (erreur, collection) ->
       collection.update { _id: new mongo.BSONPure.ObjectID(req.params.id) }, { $set: req.body } , (erreur, resultat) ->
         res.send resultat
         res.end()

,结果是

{ 
  "_id" : ObjectId("51df4ad424f6d9207cc3e2d5"),
  "nom" : "Bir",
  "nom": "House",
  "prenom": "Maxwell" : "",
  "prenom" : "Sim" 
}

我似乎无法找到一种有效的方法来设置缺失值并修改其中的值。怎么了 ?

2 个答案:

答案 0 :(得分:0)

试试这个:

exports.modify = (req, res) ->
  fields = if (typeof req.body == 'string') then JSON.parse(req.body) else req.body
  db.collection "data-center", (erreur, collection) ->
    // check erreur here
    collection.update { _id: new mongo.BSONPure.ObjectID(req.params.id) }, { $set: fields }, (erreur, resultat) ->
      // check erreur here
      res.send resultat
      res.end()

重要的是要注意,直接从req.body插入数据而不进行某种验证/内容检查安全且应该避免(即使它按预期工作)。

答案 1 :(得分:0)

如果您想将一组字段“合并”到现有对象中,可以这样做

test:PRIMARY> db.t2.insert({b:1})
test:PRIMARY> db.t2.update({b:1}, {$set: {a:1, c:2}})
test:PRIMARY> db.t2.find({b:1})
{ "_id" : ObjectId("520a3f10e2d66ef50d3b042b"), "a" : 1, "b" : 1, "c" : 2 }

啊是的,对于json问题,你不能使用“原始”对象作为json返回。您需要执行findOne以从mongodb检索更新的对象,或者更改为使用带有参数new的findAndModify以在单个操作中获取更改的对象。现有对象可能具有循环引用。