我是MongoDB的新手,正在开发一个专业网络项目,我必须区分模式中同一字段的ObjectId
。我们说我有
架构:
TestSchema = new Schema({
Invitation: {
from: [
type: schema.types.objectid,
ref: 'User'
]
}
});
Invitation
可以是不同类型,例如活动邀请,连接请求邀请,如LinkedIn,或邀请参加现场会议或讨论。现在,如果我遵循上述架构,则ObjectId
不同类型的邀请将存储在同一字段from
中,该字段不是泛型,难以获取或区分哪个ObjectId
{1}}属于哪种邀请类型。就像我将它们存储在单个数组[]
中一样,我希望使该数组中的每个ObjectId
易于区分。例如: -
{
Invitation: {
from: [Objectid(A), Objectid(B), Objectid(C)]
}
}
我们说A
属于活动邀请,B
& C
属于不同类型的邀请。上面的例子是我提出的逻辑。我还考虑使用子数组字段或子文档用于不同的邀请类型,但我认为应该有泛型方式。我花了相当多的时间在谷歌上寻找自定义对象概念的逻辑,并且不确定这个概念是否对我想要的内容有用。
答案 0 :(得分:1)
我理解你的问题,你应该创建用户或事件类型Schema,如:
EventType = new Schema(){
type: String,
eventID: {
type: Schema.Types.ObjectId
ref: 'User'}
}
并通过创建EventType对象
在服务器端轻松访问它var eventType = new EventType();
eventType.type = 'event'
eventType.eventID = //ObjectId of event doc
答案 1 :(得分:0)
@BatScream建议您在User
架构中添加“类型”字段。
var User = new Schema({
username: ...
...
type: String
});
这样您就可以区分(和 store )引用的User
架构中的类型。
TestSchema.findById(xxx, function(err, test){
test.invitation.from[0].type == user.type
});
但如果我理解您的用例,我认为您的type
邀请实际上是User
和Invitation
之间的关系存储在TestSchema
内(无论是什么))。如果是这样,您可能不希望将type
存储在User
中。也许将它存储在Invitation
本身......
TestSchema = new Schema({
Invitation: {
from: [{
type: String,
user: {
type: schema.types.ObjectId,
ref: 'User'
}
}]
}
});
这样您就可以区分(和商店) TestSchema
TestSchema.findById(xxx, function(err, test){
test.invitation.from[0].type == 'event' ??
test.invitation.from[0].user == 'user' ...
});
此外,甚至可能是偏离主题,但Neo4j非常适合处理此类数据。在那个用户 - 和 - >之间的“关系”邀请本身就是一个实体,您可以在其中存储该类型。