0

已解决,问题出在 PUT 请求上,我必须正确指定标头,然后一次处理一个。

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

我正在尝试通过我目前正在处理的 node.js 应用程序中的咖啡脚本修改 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" 
}

我似乎找不到一种有效的方法来设置缺失值并修改已经存在的值。怎么了 ?

4

2 回答 2

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 插入数据而不进行某种验证/内容检查是不安全的,应该避免(即使它按预期工作)。

于 2013-07-11T23:40:33.557 回答
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 以在单个操作中获取更改的对象。现有对象很可能有循环引用。

于 2013-08-13T14:17:59.500 回答