mongodb - 查找枚举值列表的好方法是什么?
问题描述
我有一个case
名为status
(整数)的字段的集合,其有效值为 0、1、2、4 和 8,分别代表“新”、“WIP”、“已解决”、“已取消”和“已关闭”。
因此,在猫鼬语法中,它可能类似于:
const caseSchema = new Schema({
createdOn: Date,
subittedBy: String,
status: Number,
...
});
const statusSchema = new Schema({
value: Number,
description: String
});
这是组织数据的好方法吗?如何使用status
正确填充的字段进行查询以检索案例description
?
解决方案
这是确保做到这一点的一种方法。您可以使用$lookup进行查询。它看起来像这样:
db.getCollection('<YourCasesColName>').aggregate([
{ $match : { 'status' : 1 } }, // or { $in: [1,2,3] },
{
$lookup: {
from: '<YourStatusColName>',
localField: 'status',
foreignField: 'value',
as: 'statusDoc',
}
}
])
另一种方法是通过 ObjectId添加对实际状态的引用,这样您就可以存储对实际状态对象的引用而不是数字,从而具有更好的引用完整性。但是,您仍然需要进行类似的查询才能一次获得两者。所以这就是我所说的:
const caseSchema = new Schema({
createdOn: Date,
subittedBy: String,
status: { type: mongoose.Schema.Types.ObjectId, ref: 'Status' },
// ^ now your status hows reference to exactly the type of status it has
});
const statusSchema = new Schema({
value: Number,
description: String
});
So the actual data would look like this:
// Statuses
[{
_id: <StatusMongoObjectID_1>,
value: 1,
description: 'New'
},{
_id: <StatusMongoObjectID_2>,
value: 2,
description: 'New'
}]
// Cases
[{
_id: <MongoObjectID>,
createdOn: '<SomeISODate>',
subittedBy: '<SomeString>',
status: <StatusMongoObjectID_1>
},
{
_id: <MongoObjectID>,
createdOn: '<SomeISODate>',
subittedBy: '<SomeString>',
status: <StatusMongoObjectID_2>
}]
推荐阅读
- javascript - 如何在 TypeScript 中将箭头函数返回值分配给字符串 []
- node.js - 在本地其他项目中使用修改后的 Angular cdk 模块
- javascript - 角度http请求不起作用,但邮递员工作
- swift - Audiokit 的 AKAudioFile 基本目录输入问题
- sql-server-2012 - 使用不同的运算符重复
- c# - 如何在使用 QnA 制造商服务的聊天机器人应用程序中接收用户输入
- android - 在两个堆栈之间传递参数 - React Native
- python - 将权重从 TensorFlow 检查点加载到 Keras 模型
- typescript - 如何声明只公开一个功能的 UMD 模块?
- perl - Perl 语法 <$VARIABLE> 是什么意思?