繁体   English   中英

MongoDB 查询使用 Mongoose

[英]MongoDB query using Mongoose

我有一个照片集,其中存储用户、标签、日期和照片 url。 我想要一个查询来为每个标签的用户返回 2 张最新照片。

例如

{user: 1, date: 1, url: a, tag: tag1}
{user: 1, date: 2, url: b, tag: tag1}
{user: 1, date: 3, url: c, tag: tag1}
{user: 1, date: 4, url: d, tag: tag2}
{user: 2, date: 1, url: e, tag: tag1}
{user: 3, date: 1, url: f, tag: tag1}

在用户 1 上运行查询应该返回

{user: 1, date: 1, url: a, tag: tag1}
{user: 1, date: 2, url: b, tag: tag1}
{user: 1, date: 4, url: d, tag: tag2}

我正在将 mongoose 与 NodeJ 一起使用。

询问

  • 在 MongoDB 5 中,更简单的方法是使用$setWindowFields
  • 匹配用户
  • 按标签(分区)分组,按日期排序和排名(添加一个字段,其组内每个文档的顺序)
  • 只保留排名< 3(每组只保留第 2 个)
  • 取消设置以删除排名

* MongoDB <5 的替代解决方案是按日期排序、按标签分组和切片以仅获取前 2 个。

测试代码在这里

aggregate(
[{"$match":{"$user" : 1}},
 {"$setWindowFields":
  {"partitionBy":"$tag",
   "sortBy":{"date":1},
   "output":{"rank":{"$rank":{}}}}},
 {"$match":{"$expr":{"$lt":["$rank", 3]}}},
 {"$unset":["rank"]}])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM