2016
06
02
06
02
MongoDBでオートインクリメントを・・・という話をほんの少し先まで
MongoDBでドキュメントの任意のフィールドをオートインクリメントにしたい・・・というサンプルは本家にある。
https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/
関数を使うわけだが、その時点で開いてるターミナルを閉じたらその関数は消える。なので永続化として下記のように保存、保存したものを呼び出して使える。
C#ではストアしたJavaScriptはBsonJavaScriptとして取得できる。だけどどう実行するの・・・ドキュメントでもサンプルでも使用例が見つからない。なのでストアされたものを使わずに自分で書く。
https://docs.mongodb.com/v3.0/tutorial/create-an-auto-incrementing-field/
関数を使うわけだが、その時点で開いてるターミナルを閉じたらその関数は消える。なので永続化として下記のように保存、保存したものを呼び出して使える。
db.system.js.save({_id:'nextSeq',
value:function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
} );
return ret.seq;
}
});
db.system.js.findOne({_id:"nextSeq"}).value("userid");
C#ではストアしたJavaScriptはBsonJavaScriptとして取得できる。だけどどう実行するの・・・ドキュメントでもサンプルでも使用例が見つからない。なのでストアされたものを使わずに自分で書く。
var fooCollection = db.GetCollection("foo");
var d = new BsonDocument
{
{ "a", new BsonJavaScript("(function getNextSequence(name) {
var ret = db.counters.findAndModify(
{
query: { _id: name },
update: { $inc: { seq: 1 } },
new: true
});
return ret.seq;
})('entry_id')")
}
};
fooCollection.InsertOne(d);