MongoDB 内嵌数组(多维数组)查询并分页
Verion:3.6
目标:查询指定文档中指定数组中的数组数据。
这是其中一个文档:
现在需要获取id值为5b41bfeddb27d50ae976ba56的元素的reply数组中的第二个元素。
使用find+project+slice无论我怎样试都无法实现我的需求。
所以对于这种层层嵌套的复杂数据,可以使用aggregate来逐步获取。
Aggregate聚合管道就是在一个处理完毕把结果传递给下一个管道处理。这里我用到了$match,$unwind,$project这几个管道,可能有更好的方法,希望大家提出来!
使用如下语句:
aggregate([{$match:{"comment._id":ObjectId('5b41bfeddb27d50ae976ba56')}},{$unwind:"$comment"},{$match:{"comment._id":ObjectId('5b41bfeddb27d50ae976ba56')}},{$project:{"comment.reply":{$slice:["$comment.reply",1,1]}}}]).pretty()
就是通过逐步分解外层数组得到,其中$unwind很关键,它把一个数组的元素分到单独的文档中,然后就得到一组只有comment元素是不同的数据。$match的功能很明显就是匹配文档。$project用来对文档增删。$slice其实也就相当于分页的作用啦。
执行结果: