MongoDB を使ってユーザの訪問数をカウントする
2014-08-29 mongodb
$inc 構文と upsert 併用すれば簡単。
// 1回目は insert visit_count++
> db.user.update( {user_id: "mgng"}, { $set: { user_id: "mgng", updated: new Date() }, $inc: {visit_count: 1} }, { upsert: true } );
> db.user.find( { user_id: "mgng" }, { visit_count: true } );
{ "_id" : ObjectId("53ffd435c7d54aab343e385a"), "visit_count" : 1 }
// 2回目は update で visit_count++
> db.user.update( {user_id: "mgng"}, { $set: { user_id: "mgng", updated: new Date() }, $inc: {visit_count: 1} }, { upsert: true } );
> db.user.find( { user_id: "mgng" }, { visit_count: true } );
{ "_id" : ObjectId("53ffd435c7d54aab343e385a"), "visit_count" : 2 }
最初は $setOnInsert 使って律儀に初期値をいれようとしてたんだけど、エラーが発生してダメだった。
> db.user.update( {user_id: "mgng"}, { $setOnInsert: { user_id: "mgng", visit_count: 1 }, $set: { updated: new Date() }, $inc: {visit_count: 1} }, { upsert: true } );
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16836,
"errmsg" : "Cannot update 'visit_count' and 'visit_count' at the same time"
}
})
≪ 2014-08-31
うしおととら再読中
2014-08-28 ≫
超映画批評で10点未満がついた作品一覧