如何使用mongoose更新文档中的变量字段

时间:2016-03-12 03:34:23

标签: node.js mongodb mongoose

我正在使用

db.hs.update( 
     {username: "hraj3116", "event_movie.name": "h"},
     {$set:{"event_movie.$.theatre":"vikas mall"}
     })

这在mongodb更新,这是正常的。我如何使用mongoose使用它。我想" event_movie"作为变量。

我正在使用

var  s = {'event_movie.name' : 'h'};
var event = {"event_movie.$.theatre" : "theatre"}; 
//event["event_movie.$.theatre"] = "theatre";
UserEventsDetails.findOneAndUpdate(
{ "username": username , s },
{ "$set": event },
{ "upsert": true, "new": true},
function(err, model){
    if (err){
        res.send(500, err);
    }else{
          res.send('done');
    }
});

1 个答案:

答案 0 :(得分:1)

在我们用于通过shell或使用mongoose API进行更新的查询中没有区别。在您的情况下,您需要稍微修改var query = {}; query["username"] = username; query["event_movie.name"] = "h"; 参数:

{"username":username,"event_movie.name":"h"}

生成正确的表示形式,即:

var event = {};
event["event_movie.$.theatre"] = "theatre";
//event["someOtherField"] = "someOtherValue"; --> update some other field.

UserEventsDetails.findOneAndUpdate(
query,
{ "$set": event },
{ "upsert": true, "new": true},
function(err, model){
    if (err){
        res.send(500, err);
    }else{
          res.send('done');
    }
});

然后将其用作:

{"username":username,{"event_movie.name":"h"}}

您当前构建查询的方式最终构建为:

location ~ ^/[^?]+ {
        auth_basic "Restricted";
        auth_basic_user_file /etc/nginx/htauth_file;
        proxy_set_header Host "server.lan";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass  http://127.0.0.1:8080$request_uri;
}

这是错误的。