2014-02-05 2 views
6

У меня есть список (mongodb) встроенных документов в одном документе, и я заинтересован в добавлении нового внедренного документа в список существующих.

Насколько я исследовал, я могу использовать $ addToSet, что я не могу понять, как MongoDB решает, существует ли новый документ в списке встроенных документов или если он новый, то есть как делает ли MongoDB, если 2 встроенных документа равны?

p.s. встроенные документы у меня есть не только ценности, они довольно сложные структуры, поэтому мне было интересно, если есть место, где я могу определить, что равенство между 2 из них означает ...

ответ

9

$addToSet использует обычный mongodb equality rules: он будет делать глубокое значение по значению сравнения, поэтому следующие два документа являются идентичными:

{ name: "John", hobbies: ["coding", "drinking", "chess"] } 
{ hobbies: ["coding", "drinking", "chess"], name: "John" } 

(порядок в документах is not guaranteed, поэтому они идентичны)

пока те не (попарно):

// compare to: 
{ name: "John", hobbies: ["chess", "coding", "drinking"] } 

// in arrays, the order matters: 
{ name: "John", hobbies: ["coding", "drinking", "chess"] } 

// field names and values are case sensitive 
{ Name: "John", hobbies: ["chess", "coding", "drinking"] } 
{ name: "john", hobbies: ["chess", "coding", "drinking"] } 

// additional field: 
{ name: "John", lastName: "Doe", hobbies: ["chess", "coding", "drinking"] } 

// missing field: 
{ name: "John" } 

Обратите внимание, что здесь нет специального поля. Вы можете добавить поле _id, но оно не имеет специальной семантики и будет обрабатываться так же, как и любое другое поле.

+0

Большое спасибо за всесторонний ответ! Я вижу! Это больше похоже на сравнение словарей ... – Clara

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