2013-11-21 2 views
0

У меня есть веб-служба, которая получает объект от mongodb, отображает его как json, позволяет пользователю редактировать объект, а затем сохранять объект обратно. Я пытаюсь реализовать кнопку «Сохранить как» для публикации, чтобы пользователь мог внести изменения в объект, а затем сохранить его как новый объект. Проблема в том, что objectId не меняется, когда я выполняю POST-запрос, объект просто перезаписывает существующий объект с тем же objectId.POST новый объект json для Mongodb путем изменения objectId

Есть ли способ назначить новый объект в javascript?

Реализация выполняется с помощью драйвера mongodb C# в службе wcf.

+0

Кстати: Надеюсь, что при сохранении документа под существующим ObjectId вы сначала проверяете на сервере, что пользователь фактически владеет существующим документом и не пытается перезаписать объект, принадлежащий кому-то другому. – Philipp

+0

@Philipp это не многопользовательский тип корпуса. В данный момент есть только одна коллекция и база данных. –

ответ

1

Вы можете попробовать replicate the algorithm which is used for ObjectID generation, но есть более простой способ сделать это. Когда вы просто удаляете _id из документа, MongoDB создаст новый и сохранит его под этим. Не Вы можете сделать это с помощью JavaScript удалить ключевое слово:

delete yourDocument._id; 

В качестве альтернативы вы можете сделать это на C# стороне, генерируя новый _id для документа, прежде чем сохранить его:

yourDocument.Set("_id", ObjectId.GenerateNewId()); 
+0

То, что я закончил, - это просто взять объект из моей службы и выполнить 'myObject.Id = ObjectId.GenerateNewId();' в основном то, что вы сказали. Я не думаю, что я очень хорошо объяснил эту проблему. спасибо за помощь –

0

Нет, вы не можете изменить или удалить поле _id из документа mongodb. Это связано с тем, что _id служит в качестве первичного ключа и therefore is immutable. Если вы действительно хотите изменить _id документа, вам нужно удалить этот документ и скопировать его содержимое на новый с новым _id.

P.S. Я говорю здесь о полем. Если вы хотите изменить любое другое поле, которое по какой-то причине имело данные ObjectId, вы можете это сделать.

+0

Думаю, вы не поняли вопрос правильно. Он хочет сохранить данные в качестве нового документа, а также сохранить документ со старыми данными. Поэтому он должен вставить данные с новым _id, поэтому документ старого _id не будет перезаписан. – Philipp

+0

Вы уверены, что он этого хочет? Потому что я вижу, что «позволяет пользователю редактировать объект, а затем сохранить объект обратно». Я не вижу нигде, что он хочет иметь копию предыдущих данных. Но может быть, у меня действительно не возник вопрос. –

+0

«проблема в том, что objectId не меняется, когда я выполняю запрос POST, объект просто перезаписывает существовавший ранее объект с тем же objectId». это ясно говорит, что он не ** хочет потерять предыдущие данные. – Philipp

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