Node.js mongo指定了无效的修饰符:$set未定义



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

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

每当我发出post请求时,mongo都会报告"指定的修饰符无效:未定义的$set"。

有人知道我的函数包装器出了什么问题吗?或者有更好的方法吗?

我的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的扩展"高级休息客户端"发送:

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"}
    ]
}

使用express 3.4.4mongodb 1.3.20,当我运行它时,它运行得很好。你使用的是mongodb驱动程序的旧版本吗?

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

一些一般指导:您不希望客户端发送选择器和文档。它打开了你的大门,允许有人发送可能对你的数据造成一些损害的值。

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

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

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

干杯

相关内容

最新更新