5

私はpymongoを使ってmongodbにドキュメントを挿入しています。これは router.py ファイルのコードです

    temp = db.admin_collection.find().sort( [("_id", -1)] ).limit(1)
    for doc in temp:
        admin_id = str(int(doc['_id']) + 1)


    admin_doc ={
    '_id'       :   admin_id,
    'question'  :   ques,
    'answer'    :   ans,
    }
    collection.insert(admin_doc)

挿入するたびに_idが1ずつ増えるようにするにはどうすればよいですか。

4

3 に答える 3

9

あまり良いアイデアとは思えませんが、本当にやりたい場合は、以下のような設定を試すことができます。

単一サーバーのトラフィックの少ないアプリケーションでは十分に機能するはずですが、複製またはシャード環境で、または大量の挿入を実行する場合は、このようなことは試しません。

ID seq を処理する別のコレクションを作成します。

db.seqs.insert({
    'collection' : 'admin_collection',
    'id' : 0
})

新しいドキュメントを挿入する必要があるときはいつでも、次のようなものを使用します。

def insert_doc(doc):
    doc['_id'] = str(db.seqs.find_and_modify(
        query={ 'collection' : 'admin_collection' },
        update={'$inc': {'id': 1}},
        fields={'id': 1, '_id': 0},
        new=True 
    ).get('id'))

    try:
        db.admin_collection.insert(doc)

    except pymongo.errors.DuplicateKeyError as e:
        insert_doc(doc)
于 2013-10-22T19:18:45.527 に答える