ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## $unwind * 将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值 ## 语法1 * 对某字段值进行拆分 ~~~ db.集合名称.aggregate([{$unwind:'$字段名称'}]) ~~~ * 构造数据 ~~~ db.t2.insert({_id:1,item:'t-shirt',size:['S','M','L']}) ~~~ * 查询 ~~~ db.t2.aggregate([{$unwind:'$size'}]) ~~~ ## 语法2 * 对某字段值进行拆分 * 处理空数组、非数组、无字段、null情况 ~~~ db.inventory.aggregate([{ $unwind:{ path:'$字段名称', preserveNullAndEmptyArrays:<boolean>#防止数据丢失 } }]) ~~~ * 构造数据 ~~~ db.t3.insert([ { "_id" : 1, "item" : "a", "size": [ "S", "M", "L"] }, { "_id" : 2, "item" : "b", "size" : [ ] }, { "_id" : 3, "item" : "c", "size": "M" }, { "_id" : 4, "item" : "d" }, { "_id" : 5, "item" : "e", "size" : null } ]) ~~~ * 使用语法1查询 ~~~ db.t3.aggregate([{$unwind:'$size'}]) ~~~ * 查看查询结果,发现对于空数组、无字段、null的文档,都被丢弃了 * 问:如何能不丢弃呢? * 答:使用语法2查询 ~~~ db.t3.aggregate([{$unwind:{path:'$sizes',preserveNullAndEmptyArrays:true}}]) ~~~