我正在研究领域,使其在电子中作为本地数据库离线工作。现在我想进行连接(聚合),所以我定义了两个模式之间的关系,但是数据没有同步。如果能得到帮助就太好了。
这是我的schema:
const articleMetaSchema = {
name: 'articlemeta',
properties: {
_id: 'objectId?',
catalog_id: 'objectId?',
content: 'objectId?',
createdAt: 'date?',
description: 'string?',
main_image_url: 'string?',
origin_type: 'string?',
pub_date: 'date?',
publication: 'objectId?',
sub_title: 'string?',
title: 'string?',
updatedAt: 'date?',
url: 'string?'
},
primaryKey: '_id'
}
const articleSchema = {
name: 'article',
properties: {
_id: 'objectId?',
active_search: 'bool?',
article_meta: 'articlemeta?',
catalog_id: 'objectId?',
content: 'objectId?',
createdAt: 'date?',
flagged: 'bool?',
owner_id: 'objectId?',
rating: 'int?',
read: 'bool?',
status: 'string?',
status_updated_at: 'date?',
updatedAt: 'date?'
},
primaryKey: '_id'
}
config = {
schema,
path: getDBPath(),
sync: {
user: app.currentUser,
partitionValue: new ObjectID(getCatalogId()),
error: (error) => {
console.log(error.name, error.message)
}
}
}
let realm = await Realm.open(config)
// query
我想查询并获得文章结果,在文章模式中,我们定义了一个键'article_meta',它是和objectId。现在我想文章的结果与所有的属性与article_meta作为一个对象的基础上获取的文章。Article_meta = articlemeta._id)
预期结果:
[{ _id: '1', catalog_id: '', content: '', createdAt: '', main_image_url: '', origin_type: '', pub_date: '', publication: '', sub_title: '', title: '', updatedAt: '', url: '', article_meta: {} }, {..}, {..}]
Edit:
正如在注释中指出的那样,由于文本与代码不匹配,问题中有一点模棱两可。代码显示了父对象article
具有子对象articlemeta
,这通常是正确的,以及如何在Realm中构建关系。如果关系建立在"Realmy"中,通过查询其objectId来访问子对象通常是不必要的。方法如下图所示。
——原答案——
领域对象可以通过点表示法引用"联接"的领域对象。从docs
相关和嵌入对象属性的过滤器
根据嵌入对象或对象的属性过滤查询相关对象,使用点表示法,就像它在一个规则的、嵌套的对象。
例如,一个Person对象有一个Dog对象作为它的属性之一你想要得到Person的狗的名字
让我们通过他们的_id获取一个特定的人
const person = realm.objectForPrimaryKey("Person", 1234)
如果我们想要这个人的狗的名字
const dogName = person.dog.dog_name
在你的情况下,你可以得到一个特定的文章,然后访问所有的articlemeta属性使用点符号
const article = realm.objectForPrimaryKey("article", 1234)
,然后通过点标记
访问其余属性。const id = article._id
const catalogId = article.catalog_id
const mainImageUrl = article.article_meta.main_image_url
正如您所看到的,不需要查询(对于本例),因为Realm对象知道它们自己的子属性,并且可以通过点表示法访问。