Как сгенерировать идентификатор auto increment из mongodb с помощью python [duplicate]

Я провел некоторое время, экспериментируя с этим. Кажется, это похоже на новый API-интерфейс буфера обмена . Вы можете определить обработчик события «paste» и посмотреть на event.clipboardData.items и вызвать getAsFile () на них, чтобы получить Blob. Когда у вас есть Blob, вы можете использовать FileReader на нем, чтобы узнать, что в нем. Вот как вы можете получить URL-адрес данных для материала, который вы только что вставили в Chrome:

  // window.addEventListener ('paste', ... или document.onpaste = function (event)  {var items = (event.clipboardData || event.originalEvent.clipboardData) .items; console.log (JSON.stringify (items)); // предоставит вам типы mime для (индекс в элементах) {var item = items  [index]; if (item.kind === 'file') {var blob = item.getAsFile (); var reader = new FileReader (); reader.onload = function (event) {console.log (event.target  .result)}; // data url! reader.readAsDataURL (blob);}}}  

После того, как у вас есть URL-адрес данных, вы можете отобразить изображение на странице. загрузите его вместо этого, вы можете использовать readAsBinaryString, или вы можете поместить его в XHR, используя FormData .

2
задан GolfWolf 22 October 2013 в 19:26
поделиться

2 ответа

Это не очень хорошая идея, но если вы действительно хотите пройти через нее, вы можете попробовать настроить, как показано ниже.

Он должен работать достаточно хорошо в приложении с низким трафиком с одним сервер, но я бы не пробовал ничего подобного с реплицированной или ошпаренной средой или если вы выполняете большое количество вставок.

Создайте отдельную коллекцию для обработки id seqs:

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)
6
ответ дан Drunken Master 17 August 2018 в 10:27
поделиться

Если вы хотите вручную изменить значение «_id», вы можете сделать это, изменив значение _id в возвращаемом документе. Вы можете сделать это аналогично тому, как вы предложили в своем вопросе. Однако я не думаю, что этот подход рекомендуется.

curs = db.admin_collection.find().sort( [("_id", -1)] ).limit(1)
for document in curs:
    document['_id'] = str(int(document['_id']) + 1)
    collection.insert(document)

Как правило, не рекомендуется вручную создавать свои собственные идентификаторы. Эти значения должны быть уникальными, и нет гарантии, что str (int (document ['_ id]) + 1) всегда будет уникальным.

Вместо этого, если вы хотите дублировать документ, вы можете удалить '_id' и вставить документ.

curs = db.admin_collection.find().sort( [("_id", -1)] ).limit(1)
for document in curs:
    document.pop('_id',None)
    collection.insert(document)

Это вставляет документ и позволяет mongo генерировать уникальный идентификатор.

0
ответ дан RMcG 17 August 2018 в 10:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: