我使用 MongoDB 和 Mongoose 与 Express 来存储通过 Twitter API 检索的推文。
我想避免保存重复的推文。我正在做类似的事情:
TweetsModel.find({tweet_id: tweet.tweet_id}, function (err, tweets) {
if(tweets.length > 0){
cb('Tweet already exists',null);
} else{
tweet.save(function(err){
cb(err,user);
});
}
});
我的问题是:出于性能原因,有没有办法使用 Mongoose 来避免执行两个请求?一找到一保存?
知道我也不想更新该推文(如果它已经存在)。
谢谢
您可以使用update
打电话给upsert http://docs.mongodb.org/manual/reference/method/db.collection.update/#upsert-parameter执行此操作的选项:
TweetsModel.update(
{tweet_id: tweet.tweet_id},
{$setOnInsert: tweet},
{upsert: true},
function(err, numAffected) { .. }
);
如果具有该推文 ID 的文档已存在,则这是无操作。否则它将添加文档。
$setOnInsert
需要 MongoDB v2.4+。如果您的版本低于 2.4,事情会变得更加复杂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)