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 ()
图 - Unwind操作符在MongoDB中与非数组路径字段一起工作。
如果我们在路径中遗漏了任何一个值,如果我们输入了一个错误的值,unwind操作者将不会产生任何输出。
代码。
db.MongoDB_Update.aggregate ([{$unwind: "$id"}]) db.MongoDB_Update.find ()
图--如果我们输入了任何错误的值,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 ()
图--带数组字段的解卷运算符的例子。
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"}}])
图 - 带有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 ()
图 - 带有参数 preserveNullEmptyArrays 的解卷操作实例,参数值为 true。
4) 带有preserveNullEmptyArrays参数的放卷操作,参数值为假。
在下面的例子中,我们使用了参数 preserveNullEmptyArrays 和 unwind 操作符。我们使用数组字段名为lap_storage,参数值为false的 preserveNullEmptyArrays。
代码。
db.MongoDB_Update.aggregate ([{$unwind: {path: "$lap_storage", preserveNullAndEmptyArrays: false}}]) db.MongoDB_Update.find ()
图 - 带有参数 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如何工作?例子,以及代码实现。你也可以看看下面的文章来了解更多
The postMongodb unwindappeared first onEDUCBA.