【问题标题】:Add nested collections with aggregation in mongoose?在猫鼬中添加带有聚合的嵌套集合?
【发布时间】:2021-08-05 05:46:03
【问题描述】:

我是猫鼬的新手,在创建查询时我很困惑。你能帮帮我吗?

我有这样的视频收藏:

{
    _id: 603dea86cef0aed372cd9ce6,
    category: [
        "603dea86cef0aed372cd9cd8", // array of category objectId
        "603dea86cef0aed372cd9cd9"
    ],
    hashtag: [
        "603dea86cef0aed372cd9cee" // array of hashtag objectId
    ],
    video_id: '6925666264463576320',
    share_id: 'greate_video',
    author: 603dea86cef0aed372cd9cd8, // ref to Author objectId
    cover: 'https://path.to/img.jpg',
    post_by: 60083f24edae03650406ad48, // ref to User objectId
    status: 1, // enum status [0, 1, 2]
    date: 2021-03-02T07:34:30.635Z
  }

我想查询以获取具有如下结构的数据。我的意思是,我会通过 _id 查找并从其他集合中获取相关数据,除此之外,我希望视频列表显示状态为 1、2(不是 0)并按视频 _id 排序:-1。

{
    _id: 603dea86cef0aed372cd9ce6,
    category: [
        {_id: "603dea86cef0aed372cd9cd8", category_name: Tech},
        {_id: "603dea86cef0aed372cd9cd9", category_name: Mobile},
    ],
    hashtag: [
        {_id: "603dea86cef0aed372cd9cee", hashtag_name: tech},
    ],
    video_id: '6925666264463576320',
    share_id: 'greate_video',
    author: {_id: "603dea86cef0aed372cd9cd8", author_name: Nani, avatar: 'https://path.to/avatar.jpg'},
    cover: 'https://path.to/img.jpg',
    post_by: {_id: "603dea86cef0aed372cd9cd8", user_name: Username, avatar: 'https://path.to/avatar.jpg'},
    status: 1,
    date: 2021-03-02T07:34:30.635Z
  }

如何编写聚合查询?我尝试过这样的查询,但不起作用,它显示空 [] 结果。

const videoList = await Video.aggregate([
            {
                $lookup:
                {
                    from: 'Author',
                    localField: "author",
                    foreignField: "_id",
                    as: "author_info"
                }
            }
        ])

谢谢

【问题讨论】:

  • 双方author是objectId类型时应该可以工作,请检查集合名称,在from中输入您在数据库中的确切名称。
  • 我知道了,我改成authors 并且它有效。但是我如何定义条件:只显示状态为 1、2(不是 0)的视频并按视频 _id 排序:-1。我还想添加跳过,限制。
  • 对于状态匹配使用 $ne: 0 在$match 阶段和跳过使用$skip,以及限制使用$limit,只要谷歌它你会找到文件,我认为它非常容易理解。
  • 我明白了,谢谢。我现在可以随心所欲地工作。

标签: javascript node.js mongodb


【解决方案1】:

收藏的名称通常用复数小写字母写,所以我认为你应该将作者更改为作者

【讨论】:

  • 我知道了,我改成authors 并且它有效。但是我如何定义条件:只显示状态为 1、2(不是 0)的视频并按视频 _id 排序:-1。我还想添加跳过,限制。
猜你喜欢
  • 2020-06-12
  • 2021-04-14
  • 2021-05-06
  • 2020-05-10
  • 2016-02-02
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
相关资源
最近更新 更多