[英]why does my node.js endpoint for saving data into array raises error while modifying data?
在我的mongoose
模式中,我具有以下用於存儲用戶的模型:
var UsersSchema = new Schema({
username: {type: String},
our_username: {type: String},
our_display_name: {type: String},
hashtags: {type: [String]}
}
我想在node.js中創建一個端點,以允許用戶更新(添加/刪除)這些標簽,我的用例場景是當用戶登錄到我的應用程序時,我用一個簡單的get
端點向他顯示所有標簽:
usersRoutes.get('/:username/hashtags/', functions.validateRequestsGET, function(req, res){
var username = req.params.username;
var query;
if(username != undefined) {
query = User.find({}).where('username').equals(username).select('hashtags -_id');
}
query.exec(function(err, hashtags){
if(err) {
res.send(err);
return;
}
res.json(hashtags);
});
});
但是,如何創建一個允許用戶添加/刪除主題標簽的終結點? 我嘗試了這個:
usersRoutes.post('/:username/', function (req, res) {
var username = req.params.username;
var hashtagsToAdd = req.body.hashtagsToAdd;
var hashtagsToRemove = req.body.hashtagsToRemove;
console.log(hashtagsToAdd);
console.log(hashtagsToRemove);
User.findOneAndUpdate(
{username: username},
{
$push: {"hashtags": hashtagsToAdd},
$pull: {"hashtags": hashtagsToRemove},
},
{safe: true, upsert: true},
function(err, user) {
if(err)
console.log(err);
return callback(err);
res.json(user);
}
);
});
我用它發送:
{"hashtagsToRemove":["food"], "hashtagsToAdd":["something"]}
到我的端點:
http://localhost:3000/users/randomUsername/
但這會引發錯誤:
message: 'Cannot update \'hashtags\' and \'hashtags\' at the same time'
如何修改端點,使其涵蓋添加/刪除主題標簽的可能性?
您在MongoDB上同時執行$pull
和$push
,這是不允許的。
您有兩種可能性來實現自己想要做的事情:
選項1
findOne
) user.hashtags
屬性手動添加和刪除#標簽 $set
運算符更新用戶hashtags
屬性。 例:
User.findOne({username: username}, function (err, user) {
user.hashtags = addToArray(user.hashtags, hashtagsToAdd);
user.hashtags = removeFromArray(user.hashtags, hashtagsToRemove);
user.save(function (err, updatedUser) {
console.log('yeepee');
});
});
addToArray
和removeFromArray
留給練習;-)
選項2
您可以依次更新用戶:使用$push
的第一個請求,在回調中使用$pull
另一個請求。
功能要求
有一個打開的功能請求: https : //jira.mongodb.org/browse/SERVER-1050但是沒有實現它的計划。
相關問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.