📜  MongoDB - $each 修饰符(1)

📅  最后修改于: 2023-12-03 14:44:21.387000             🧑  作者: Mango

MongoDB - $each 修饰符

MongoDB是一种流行的NoSQL数据库,它使用了面向文档的数据模型,其中文档由键值对组成的BSON对象组成。MongoDB支持各种查询操作和更新操作,包括使用$each修饰符来更新数组字段中的多个文档。

什么是$each修饰符?

$each修饰符在MongoDB中的作用是将一个数组中的每个元素插入到目标数组字段中。这意味着您可以将多个文档插入到数组中,并且不必使用多个更新操作。

在MongoDB中,您可以使用一些其他的修饰符来执行类似的操作,包括$push和$addToSet。但是,$each修饰符有其特殊之处,它可以将多个文档一次性插入到数组中。

如何使用$each修饰符?

要使用$each修饰符,您需要使用update()方法来更新文档,像这样:

db.collection.update(
   <query>,
   { $push: { <field>: { $each: [ <value1>, <value2>, ... ] } } },
   { <options> }
)

在这里,我们将, 等添加到数组字段中。如果它不存在,MongoDB将创建它。$push操作将添加一个元素到数组的末尾,而$each将添加多个元素。

以下是一个使用$each修饰符的示例:

db.users.update(
   { _id: ObjectId("5fb7b24a410f1321745c4693") },
   { $push: { interests: { $each: [ "reading", "cooking", "traveling" ] } } }
)

在这里,我们将读书、烹饪和旅行添加到具有给定ID的用户的兴趣数组字段中。

如果您想将多个文档插入到数组中,您可以传递一个包含这些文档的数组,像这样:

db.users.update(
   { _id: ObjectId("5fb7b24a410f1321745c4693") },
   { 
     $push: { 
       interests: { 
         $each: [
          { name: "music", level: "advanced" },
          { name: "painting", level: "beginner" }
         ] 
       } 
     } 
  }
)

在这里,我们将包含音乐和绘画的兴趣数组添加到具有给定ID的用户的兴趣数组中。

其他$each修饰符选项

$each还支持使用其他选项来定制插入操作。这些选项包括:

  • $slice: 指定从数组末尾删除多少个元素(例如,$each: [1, 2, 3], $slice: -4将删除数组中的第一个元素)
  • $sort: 按指定的排序顺序插入元素
  • $position: 指定要插入的位置(默认情况下,每个元素都会添加到数组的末尾)

以下是使用这些选项的示例:

db.users.update(
   { _id: ObjectId("5fb7b24a410f1321745c4693") },
   { 
     $push: { 
       interests: { 
         $each: [
          { name: "music", level: "advanced" },
          { name: "painting", level: "beginner" }
         ],
         $slice: -5,
         $sort: { level: -1 }
       } 
     } 
  }
)

在这里,我们插入包含音乐和绘画的兴趣数组,并将其切片为最后的5个元素,按级别对元素进行排序。

结论

$each修饰符是MongoDB中一个非常有用的更新操作,它允许您将多个文档一次性插入到数组中。它还提供了多个选项来控制添加的元素的行为。如果您正在寻找一种更快速,更便捷的方法来更新文档中的数组字段,请尝试使用$each。