是否可以在 MongoDB 聚合期间为每个文档创建唯一 ID?
Posted
技术标签:
【中文标题】是否可以在 MongoDB 聚合期间为每个文档创建唯一 ID?【英文标题】:Is it possible to create a unique ID for each document during MongoDB aggregation? 【发布时间】:2022-01-07 03:56:27 【问题描述】:我创建了一个按用户创建使用报告的管道。 我编写了所有管道并尝试进行最终合并,但我注意到在“on”处没有具有唯一 id 的字段。
我尝试使用$out
,但我不能,因为我希望收藏集继续堆叠而不被覆盖。
我只想继续为我的结果插入新的 ObjectId。
$merge:
into: "Report",
on: "?? don't have uniq field ... why we can't just make newId for each new documents!!",
whenMatched: "i just want to keep insert",
whenNotMatched: "insert",
我的最终文件看起来像
name:"개발"
userId: ObjectId(6049eeb428398a115cf83404)
purchaseBundleCnt:230
purchaseBundlePriceSum:5769500
yyyymmdd:20211001
在考虑了几种方法后,我发现通过拼接yyyymmdd
和userId
,可以创建一个唯一的id。但是因为不是ObjectID.Type
,所以在on
中是不接受的。
【问题讨论】:
Does this answer help?否则,由于您正在为每个用户制作报告,看来您可以使用 userId 作为唯一键,或者可能是_id: userId: ..., yyyymmdd: ...
的复合索引。
@RickN 是的,它似乎对我有帮助!我会试试谢谢!
【参考方案1】:
我不知道我说得对不对,但如果你想为 on 属性生成一个唯一的 id,你可以尝试以下方法:
你可以在 require('mongoose').Types 上找到 ObjectId 构造函数。
var mongoose = require('mongoose');
$merge:
into: "Report",
on: mongoose.Types.ObjectId()
对于 Mongoose 6,您必须在调用前加上 new:
$merge:
into: "Report",
on: new mongoose.Types.ObjectId()
我没有尝试,但我希望这对你有用。
【讨论】:
我试过了,但每个文档都有一个相同的新 ObjectId。以上是关于是否可以在 MongoDB 聚合期间为每个文档创建唯一 ID?的主要内容,如果未能解决你的问题,请参考以下文章