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 条件从列表中获取对象的主要内容,如果未能解决你的问题,请参考以下文章

从列列表中删除选择子查询到主查询

从列中获取值并根据值是不是正确显示该行中的所有内容(LINQ - c# web API)

用于从列中删除超链接的 SQL 查询

使用 or 优化查询

JS判断电话/手机的格式是不是正确

如何从列数未知的存储过程中查看 Toad 中结果集的内容?