Realm JS:正确查询以使用 AND 条件从列表中获取对象
Posted
技术标签:
【中文标题】Realm JS:正确查询以使用 AND 条件从列表中获取对象【英文标题】:RealmJS: Correct query to fetch object from list with AND consition 【发布时间】:2018-08-27 14:12:46 【问题描述】:产品架构有很多细节,例如:产品名称、制造日期、制造商名称、产品类型等。但我需要支持没有为产品详细信息定义架构的灵活性。为了实现这一点,下面是 Realm-JS 模式。
import Realm from 'realm';
export default class ProductModel extends Realm.Object
ProductModel.schema =
name: 'ProductModel',
properties:
productAttributes: type: 'list', objectType: 'ProductDetailsModel' ,
ID: type: 'string', optional: true ,
;
import Realm from 'realm';
export default class ProductDetailsModel extends Realm.Object
ProductDetailsModel.schema =
name: 'ProductDetailsModel',
properties:
attributeName: type: 'string', optional: true ,
attributeValue: type: 'string', optional: true ,
;
这种灵活性降低了编写过滤器查询的复杂性。我需要能够根据特定的产品属性名称和产品属性值进行过滤。
let query = "productAttributes.attributeName = " + "\"" + "Manufacturer" + "\"" + " AND productAttributes.attributeValue = [c]" + "\"" + "Pepsico" + "\"";
var productList = this.realm.objects('ProductModel').filtered(query).snapshot();
请帮助我编写查询以从与 ProductDetailsModel 匹配的属性名和属性值的数据库中过滤 ProductModel 吗?
当前查询与单个 ProductDetailsModel 不匹配,其中 attributeName ="Manufacturer" AND attributeValue = "Pepsico"
【问题讨论】:
【参考方案1】:您通过 Objects 本地属性引用它,而不是链接对象的名称。例如
let attributeName = "Manufacturer"
let attributeValue = "Pepsico"
let query = `productAttributes.attributeName ==[c] '$attributeName' AND productAttributes.attributeValue ==[c] '$attributeValue'`
【讨论】:
我的错,我打错了问题,现在更正了。但结果是一样的。 语法没问题。它是完全同步的还是部分同步的领域?你能获取没有过滤的模型吗? 我想要将 attributeName 和 attributeValue 匹配在一起的高级 ProductModel 对象。对于当前查询,它在至少一个 attributeName = "Manufacturer" 和至少一个 attributeValue = "Pepsico" 时返回 ProductModel。当且仅当它匹配attributeName时,我如何表达它应该匹配attributeValue。希望我很清楚。以上是关于Realm JS:正确查询以使用 AND 条件从列表中获取对象的主要内容,如果未能解决你的问题,请参考以下文章