我有一个( MongoDB )文档内的嵌入式文档列表,我想将新的嵌入式文档添加到现有嵌入式文档列表中。根据我的研究,可以使用 $addToSet 命令,但我无法确定 MongoDB 如何判断新文档是否已存在于嵌入式文档列表中,或者是一个新的文档,即 MongoDB 如何判断两个嵌入式文档是否相等?顺便说一下,我拥有的嵌入式文档不仅仅是值,它们是非常复杂的结构,所以我想知道是否有任何地方可以定义两个嵌入式文档之间的相等性...
$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
字段,但它没有特殊语义,并将像任何其他字段一样被处理。