【发布时间】: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