2015-03-10 2 views
0

Если у меня есть коллекция с _id типа ObjectId, и я не создаю ее самостоятельно, прежде чем вызывать метод Collection.Save, Save должен сгенерировать ее для меня. Возникает вопрос: всегда ли метод Save возвращает обратно вновь созданный _id для каждого типа WriteConcern?running Сохранить метод для получения вновь созданного _id назад

В качестве примера я могу сделать это в C#:

public ObjectId Save(entity) 
{ 
    Collection.Save(entity); 
    return entity.Id 
} 

будет я всегда получить обратно генерируется _id независимо от настроек WriteConcern и других факторов?

ответ

0

Да, при вызове save() вы всегда будете возвращать «upserted» id (т. Е. Существующий _id в случае обновления и сгенерированный _id в случае вставки).

Я не знаком с C# api. В Java метод save() возвращает объект типа WriteResult, который имеет вспомогательный метод с именем getUpsertedId(), который вернет значение _id обновленного документа.

Из документации:

Получает значение _id в качестве upserted документа, что в результате этой записи. Обратите внимание, что для серверов MongoDB до версии 2.6 этот метод возвращает значение null, если _id обновленного документа не имеет типа ObjectId.

0

Возвращаемое значение .Save является WriteConcernResult доступ значение .Upserted property to see the _id` из вновь созданного документа:

public ObjectId Save(entity) 
{ 
    WriteConcernResult result = Collection.Save(entity); 
    return result.Upserted 
} 
+0

Это свойство 'result.Upserted' всегда пустой ко мне после того, как Сохранить вызов, погода I генерировать Id вручную с помощью объекта ObjectId.GenerateNewId() 'или передавать его как null. Ошибок в обоих случаях не происходит, и документ успешно обновлен или вставлен в базу данных. Mongodb C# driver 1.10 – YMC

+0

@YMC попытаться выполнить регистрацию всего объекта результата и убедиться, что вы не соответствуете существующему документу. –

+0

@Nail Lunn Согласно профилю, регулярная операция 'insert' генерируется как результат запуска метода' Save' с новым 'ObjectId'. 'WriteConcernResult':' Ok: true', 'DocumentsAffected: 0',' HasLastErrorMessage: false', 'updatedExisting: false',' Upserted: null' – YMC

Смежные вопросы