10

我在一个文档中有一个(mongodb)嵌入式文档列表,我有兴趣在现有文档列表中添加一个新的嵌入式文档。

据我研究,我可以使用$addToSet,我想不通的是MongoDB如何确定新文档是否已经存在于嵌入文档的列表中,或者它是否是一个新文档,即MongoDB如何决定是否2 嵌入文件是否相等?

ps 我拥有的嵌入文档不仅仅是值,它们是相当复杂的结构,所以我想知道是否有任何地方可以定义它们之间的相等性意味着什么......

4

1 回答 1

15

$addToSet使用通常的mongodb 相等规则:它将进行深度逐值比较,因此以下两个文档是相同的:

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

(不保证文件中的顺序,因此它们是相同的)

而那些不是(成对):

// 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字段,但它没有特殊的语义,将被视为与任何其他字段一样。

于 2014-02-05T13:22:06.603 回答