关于MonoDB unwind

620 阅读5分钟

Mongodb unwind

Monodb unwind的定义

MongoDB的unwind操作符是用来将数组字段从输入文件解构为输出文件的,它将被用于文件中的每个元素。在unwind操作中,输入和输出文档的区别非常简单,数组中某个字段的输出文档值被输入文档数组中的单个项目所取代。MongoDB的unwind操作符基本上用于将复杂的文档转移到简单的文档,它将提高文档的可读性和理解性。使用MongoDB中的unwind操作符,我们还可以对数据进行分组和排序等操作。

语法。

下面是MongoDB中解卷操作的语法。

1){$unwind: <Path of field>}

{ $unwind: { Path: <Path of field>, IncludeArrayIndex : <Type is string>, PreserveNullEmptyArrays : <Type is Boolean> } }

MongoDB中解卷运算符的参数描述语法

1) 解除操作符 -

该操作符用于解构MongoDB中的文档。每个输出和输入文件都相互依赖,以解构价值。我们将输入参数与unwind操作符一起传递,以显示结果。在MongoDB中使用时,Unwind操作符的前缀为$。

2) 路径 -

这个参数在MongoDB解压操作中的类型是一个字符串。这是一个数组的路径字段,路径被用来指定文档的路径。在MongoDB中使用unwind操作符时,这是一个强制性参数。

3) IncludeArrayIndex -

这是一个可选的参数,当在MongoDB中使用unwind操作时。这个参数在MongoDB解压缩操作中的类型是一个字符串。这说明一个字段的新名称被用来保存元素的索引阵列。这个参数名称不以$符号开始。

4) PreserveNullEmptyArrays - 保留空值数组

这个参数在MongoDB解压操作中的类型是布尔值。PreserveNullEmptyArrays是一个可选的参数,当在MongoDB中使用unwind操作时。如果该参数的路径包含真值,解卷运算器将显示输出,如果该参数的路径包含假值,解卷运算器将不显示输出。

Unwind在Mongodb中是如何工作的?

MongoDB的unwind操作者将对每个文档进行解构。Unwind操作符基本上是在数组元素上工作。我们也可以使用嵌入式文档与解卷操作。

我假设我们的数组包含ABC学生分数为{50, 55, 60, 70, 75}。解除运算符将返回如下的输出。

{Name: “ABC”, mark: 50} {Name: “ABC”, mark: 55} {Name: “ABC”, mark: 60} {Name: “ABC”, mark: 70} {Name: “ABC”, mark: 75}

上面的输出显示,数组将被解构为多个文档。我们的数组包含单个文档的值,但我们可以看到输出将显示其中的多个文档。

在MongoDB中使用unwind操作时,我们可以传递includeArrayIndex和preserveNullEmptyArrays参数。这两个参数在使用unwind操作时都是可选的。

Unwind操作者将把每个数组元素复制到不同的文件中。这被用于包含数据的数组,如月份、星期和年份。

Unwind操作符也适用于非数组路径字段。在MongoDB 3.2版本之前,如果我们使用了一个非数组路径字段,它将显示一个错误。在3.4版本之后,每个非数组路径字段都不会显示任何错误,它将返回数组的单个元素。

在下面的例子中,我们使用了非数组路径字段作为一个名称。在使用非数组路径字段后,数组元素将检索到单个文件。

代码。

db.MongoDB_Update.aggregate ([{$unwind: "$name"}]) db.MongoDB_Update.find ()

1

图 - Unwind操作符在MongoDB中与非数组路径字段一起工作。

如果我们在路径中遗漏了任何一个值,如果我们输入了一个错误的值,unwind操作者将不会产生任何输出。

代码。

db.MongoDB_Update.aggregate ([{$unwind: "$id"}]) db.MongoDB_Update.find ()

2

图--如果我们输入了任何错误的值,unwind操作器将不会产生任何输出。

在上面的例子中,我们在unwind操作中使用了id字段,但是id字段在MongoDB_Update集合中不存在。所以unwind操作者将在输出中返回空的结果。

例子

下面的例子显示了MongoDB中的unwind操作。

1) 带有数组字段的解压操作 -

在下面的例子中,我们使用了数组字段名称为lap_storage。在使用数组字段后,我们可以看到,结果将显示每个文档的不同字段。

Lap_storage包含6个数组元素,MongoDB_Update集合包含2个文档,所以我们可以看到,unwind操作者显示的输出是12个文档。

db.MongoDB_Update.aggregate ([{$unwind: "$lap_storage"}]) db.MongoDB_Update.find ()

3

图--带数组字段的解卷运算符的例子。

2) 带有includeArrayIndex参数的松开操作符 --

在下面的例子中,我们使用了includeArrayIndex参数和unwind操作。我们使用数组字段名称为lap_storage,includeArrayIndex字段为MongoDBIndex。

MongoIndex是一个用户定义的字段,用于从lap_storage字段捕获数组索引。

代码。

db.MongoDB_Update.find () db.MongoDB_Update.aggregate ([{$unwind: {path: "$lap_storage", includeArrayIndex: "MongoDBIndex"}}])

4

图 - 带有includeArrayIndex参数的Unwind操作的例子。

3) 带有preserveNullEmptyArrays参数的Unwind操作符,其值为true --

在下面的例子中,我们使用了参数 preserveNullEmptyArrays 和 unwind 操作符。我们使用数组字段名称为lap_storage,参数值为true的 preserveNullEmptyArrays。

代码。

db.MongoDB_Update.aggregate ([{$unwind: {path: "$lap_storage", preserveNullAndEmptyArrays: true}}]) db.MongoDB_Update.find ()

5

图 - 带有参数 preserveNullEmptyArrays 的解卷操作实例,参数值为 true。

4) 带有preserveNullEmptyArrays参数的放卷操作,参数值为假。

在下面的例子中,我们使用了参数 preserveNullEmptyArrays 和 unwind 操作符。我们使用数组字段名为lap_storage,参数值为false的 preserveNullEmptyArrays。

代码。

db.MongoDB_Update.aggregate ([{$unwind: {path: "$lap_storage", preserveNullAndEmptyArrays: false}}]) db.MongoDB_Update.find ()

6

图 - 带有参数 preserveNullEmptyArrays(假值)的解卷操作实例。

5) 使用嵌入文件的解卷操作符

下面的例子显示了使用嵌入式文档的解压操作。我们将嵌入的文档字段名定为lap_spec。

此外,我们还使用了 preserveNullEmptyArrays 参数和unwind操作。我们将参数 preserveNullEmptyArrays 的值设置为 true。

代码。

db.MongoDB_Update.aggregate ([{$unwind: {path: "$lap_spec", preserveNullAndEmptyArrays: true}}]).pretty () db.MongoDB_Update.find ()

图--在MongoDB中使用嵌入式文档的解卷操作实例。

总结

Unwind操作符在MongoDB中对于解构数组字段是非常有用和重要的。我们在使用unwind操作时,使用了preserveNullEmptyArrays和includeArrayIndex可选参数。我们也可以使用嵌入式文档与unwind操作符。我们可以通过使用MongoDB中的unwind操作符将复杂的文件转移到简单的文件中。

推荐文章

这是一个关于Mongodb解压的指南。在这里,我们讨论了定义、语法、Mongodb中的unwind如何工作?例子,以及代码实现。你也可以看看下面的文章来了解更多

  1. MongoDB导入
  2. MongoDB findOne()
  3. MongoDB group by
  4. MongoDB join

The postMongodb unwindappeared first onEDUCBA.