mongodb - 创建文档时,如何将 objectId 的值设置为与 _id 不同的另一个属性?
问题描述
我正在尝试创建一个如下所示的对象:
const userSettingsSchema = extendSchema(HistorySchema, {
user: //ObjectId here,
key:{type: String},
value:{type: String}
});
这是路由器中声明的 post 方法
app.post(
"/api/user/settings/:key",
userSettingsController.create
);
这是“创建”方法:
async create(request, response) {
try {
const param = request.params.key;
const body = request.body;
console.log('body', body)
switch (param) {
case 'theme':
var userSettings = await UserSettings.create(body) // user:objecId -> missing...
response.status(201).send(userSettings);
break;
}
} catch (e) {
return response.status(400).send({ msg: e.message });
}
}
我不知道如何将值分配给ObjectId
属性user
,因为ObjectId
是在创建文档时生成的,因此,我不能这样做:userSettings.user = userSettings._id,因为对象已经存在。我只能设法创建这样的东西:
{
"_id": "60c77565f1ac494e445cccfe",
"key": "theme",
"value": "dark",
}
但它应该是:
{
"user": "60c77565f1ac494e445cccfe",
"key": "theme",
"value": "dark",
}
解决方案
_id 是文档的唯一强制性属性。它是文档的唯一标识符,您不能将其删除。
如果您提供没有 _id 的文档,驱动程序将生成一个。
您可以将 ObjectId 生成为
let id = mongoose.Types.ObjectId();
并将其分配给您想要的任意数量的属性。
您甚至可以为同一文档的不同属性生成多个不同的 ObjectId。
现在,您实际上不需要将 ObjectId 分配给“用户”属性。_id 会做得很好。实际上,您很可能不需要单独集合中的用户设置,尤其是作为具有单个键值对的多个文档。
您应该将“设置”属性作为键值 json 嵌入到“用户”集合中。
推荐阅读
- vba - 如何使用 vba 从 excel 表中创建例如 5 个文件夹?
- python - 未找到密钥:_PYSPARK_DRIVER_CALLBACK_HOST
- javascript - XMLHttpRequest POST 给出媒体文件错误
- spring-security - Spring Boot & Security OAuth2 令牌访问问题
- java - Mockito FindIterable
- arm - Qbs:在构建 arm 目标时运行 googletests
- docker - 在 docker 容器内安装包管理器,用于像“prom/busybox”这样的图像
- javascript - 两个数字相加 JS
- java - Egit类变灰了
- kubernetes - ManageIQ 未显示 Kubernetes 容器提供程序的信息,并且缺少集群读取器 ClusterRole