Node.js mongo指定的修饰符无效:$ set undefined

时间:2013-11-25 18:31:40

标签: node.js mongodb express

我正在使用Node.js + Express与mongodb进行交互。

我正在尝试编写一个mongodb更新函数包装器。

每当我发布帖子请求时,mongo报告“指定了无效的修饰符:$ set undefined”。

任何人都知道我的功能封装器有什么问题吗?或者有更好的方法吗?

我的update_personal_info.js如下所示:

exports.update_personal_info = function(req, res){
var critia = req.body.critia;
var data = req.body.data;
db.collection('accounts', function(err, collection) {
    collection.update(critia, data, function (err, doc) {
        if (err) {
            res.send("There's problem updating the db");
        }
    });
});
}

我用来通过Chrome的扩展程序“Advance Rest Client”发送的帖子数据:

critia={"_id": "user_1234"}
data={$set: {"password": "44444444"}}

我的app.js看起来像这样:

app.post('/1',update_personal_info);

帐户集合如下所示:

{
"_id": "user_1234", 
"name": "John Chu", 
"password": "111111", 
"address": [
    {"old": "123 seattle st. WA. 123456"},
    {"new": "123 new york st. DC. 123456"}
    ]
}

2 个答案:

答案 0 :(得分:0)

使用express 3.4.4mongodb 1.3.20运行时效果很好。您使用的是mongodb驱动程序的旧版本吗?

我确定您要做的一件事是在高级REST客户端中正确设置内容类型。如果您使用Payload部分中的Form选项卡,则需要将其设置为application/x-www-form-urlencoded

一些一般性指导: 您不希望客户端在选择器和文档中发送。它会向您开放,允许某人发送可能会对您的数据造成一些损害的值。

答案 1 :(得分:0)

我通过使用eval()函数将post数据字符串转换为对象来解决我自己的问题:

var critia = eval("("+req.body.critia+")");
var data = eval("("+req.body.data+")");

希望这个答案能够帮助他人。

干杯