![](/img/trans.png)
[英]update with upsert: true is not updating in express,mongoose?
[英]Mongoose update/upsert?
我查看了网站上的一些问题,但还没弄清楚我做错了什么。 我有一些像这样的代码:
var mongoose = require('mongoose'),
db = mongoose.connect('mongodb://localhost/lastfm'),
Schema = mongoose.Schema,
User = new Schema({
nick: String,
hmask: String,
lastfm: String
});
var UserModel = mongoose.model('User', User);
//Register user to mongodb
var reg_handler = function (act) {
// should add a new entry to the db if nick (act.nick) && hmask (act.host)
// aren't already in the db. Otherwise, update the entry that matches nick
// or hostmask with the new lastfm name (act.params)
};
var get_handler = function (act) {
UserModel.find({ nick: act.params }, function (err, users) {
if (err) { console.log(err) };
users.forEach(function (user) {
console.log('url for user is http://url/' + user.lastfm);
});
});
};
我不确定我应该在中间做什么来让它正确地更新数据库。 我已经尝试了很多东西,无法撤消以找出我尝试过的所有内容。 这是我晚上的很大一部分,我希望它工作。
这几乎是我想要的,我想知道是否有任何方法可以在.update()
的条件部分执行OR
var reg_handler = function (act) {
var lfmuser = { nick: act.nick, hmask: act.host, lastfm: act.params };
UserModel.update({ nick: act.nick }, { $set: lfmuser }, { upsert: true }, function(){});
};
我会继续玩弄它。
var reg_handler = function (act) {
UserModel.update({ $or: [{nick: act.nick}, {hmask: act.host}] }, { $set: { lastfm: act.params } }, { upsert: true }, function(){});
};
这正是我想要的,它是一条线。 :D完美!
使用findOneAndUpdate并将'upsert'选项设置为true。
首先,您需要为特定集合定义模式
用户架构:
username: {type: String, required: true, upsert: true }
在代码中使用:
.findOne({ emailId: toEmail })
.update({$set: { username: ravi }})
.exec()
您可以使用findOneAndUpdate()
并需要设置{new: true}
。 您可以查看4.0.0发行说明 ,默认情况下“new”默认为false
。
UserModel.findOneAndUpdate(
{ nick: act.nick }, //your condition for check
{ $set: lfmuser }, //new values you want to set
{ upsert: true, 'new': true }).exec(function (err, data){
//your result
});
);
怎么样(没有测试,但应该使用最新的猫鼬):
UserModel.findAndModify({nick: act.nick, hmask: act.host}, [], {$set: {lastfm: act.params}}, {}, callback);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.