首页 > 解决方案 > 使用 $slice 时使用数组长度

问题描述

是否可以获取数组的长度posts并在$slice操作中使用它?

  Feed.find(
                { owner: { $in: joinedFeeds } },
                { posts: { $slice: [<length>, fetcher] } }
              )

我的目标是每次调用路由时获取一定数量的帖子。所以,我想取数组的最后一片

标签: mongodbmongoose

解决方案


这是我收集的数据:

db.test.insert([
{ "_id" : 1, "item" : "ABC1", "description" : "product 1", colors: [ "blue", "black", "red" ] ,'fav':["1","2"]},
{ "_id" : 2, "item" : "ABC2", "description" : "product 2", colors: [ "purple" ],'fav':[] }
])

请检查下面的查询,该查询将根据该记录的“fav”数组的长度从“colors”数组中获取元素。

db.test.aggregate([
   {
      $project: {
         finalTotal: {
            $let: {
               vars: {
                  numberOfColors: { $cond: { if: { $isArray: "$fav" }, then: { $size: "$fav" }, else: "NA"} }
               },
               in: { $slice: [ "$colors", "$$numberOfColors" ] }
            }
         }
      }
   }

] )

请让我知道这是否有帮助,并且如果您在实施时遇到任何问题。


推荐阅读