【发布时间】:2015-07-18 15:11:02
【问题描述】:
我正在使用基于 mongo 的 DB 模式,其中有 ReferenceFields (ObjectIds) 列表。
所以假设我有两个模型:用户、组
用户对象:
{
"_id" : ObjectId("554ba2897fdd66239457fb33"),
"name" : "something"
}
组对象:
{
"_id" : ObjectId("453490sdkjskldfjlskdjf"),
"name" : "group_name",
users : [ ObjectId("554ba2897fdd66239457fb33"), ObjectId("554ba28a7fdd66239457fb34") ]
}
ExtJS 用户模型
Ext.define('Group',{
extend: 'Ext.data.Model',
idProperty : 'id',
fields:[
{name:'group_id', type : 'string', mapping : '_id', persist : false},
{name:'name', type : 'string', mapping : 'name', persist : false}
],
hasMany : { model : 'User', foreignKey:'id' , name : 'users'}
});
用户模型:
Ext.define('User',{
extend: 'Ext.data.Model',
idProperty : 'id',
fields:[
{name:'id', type : 'string', mapping : '_id', persist : false},
{name: 'name', type: 'string'},
]
});
当我访问 group.users() 时在 EXTJS 代码中;
当我通过提供外键向模型添加关联时,在商店中使用 rest 方法会触发 GET 请求
/users?filter=[{"property":"group_id","value":"453490sdkjskldfjlskdjf","exactMatch":true}]
但这是 MySQL 的一种关联。
如何解决这个问题以适应 mongo 风格的关联?
所以我基本上希望这种情况发生。现在当我打电话
groups.users().load() 它使用像这样的过滤器参数向用户代理发出 GET 请求
/users?filter=[{"property":"group_id","value":"453490sdkjskldfjlskdjf","exactMatch":true}]。但是我在用户中没有 group_id !所以它必须根据它在组对象的用户属性中找到的 ObjectId 来查询用户代理。
由于这在基于文档的数据库中很常见,默认情况下可以吗?我错过了什么吗? 谢谢。
【问题讨论】:
-
@Saki:嘿!我希望这发生 ->
group.users().load();这应该获取用户并给我该组中的用户存储。此外,我已经设置了两个商店来拥有所有用户和组。有什么办法可以从当地商店买到吗? -
MongoDB 不是关系型数据库,我认为您不会发现 ExtJS 数据模块可以很好地与文档数据库配合使用。您可以创建一个面向 mongo 并以兼容方式处理关系的 API。我不知道为什么这么多开发人员将 mongo 用于关系数据。有更好的选择。无论如何,您可能想要这样的 API 来处理授权?
标签: mongodb extjs mongoengine