已解决,问题在于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"
}
我似乎无法找到一种有效的方法来设置缺失值并修改其中的值。怎么了 ?
答案 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以在单个操作中获取更改的对象。现有对象可能具有循环引用。