我有一张看起来像下面的桌子
import requests
names = ['telesoftas', 'devbridge_lt']
for name in names:
html = requests.get(' https://rekvizitai.vz.lt/en/company/' + names)
// ...
@Entity
@JsonIgnoreProperties(ignoreUnknown = true)
public class Product
{
@PrimaryKey
@ColumnInfo(name = "ID")
@JsonProperty("ID")
public int id;
@ColumnInfo(name = "Name")
@JsonProperty("Name")
public String name;
@ColumnInfo(name = "Documents")
@JsonProperty("Documents")
@TypeConverters(DocumentConverter.class)
public List<Document> documents;
}
通过执行类似的操作,我可以根据产品名称检索产品
@TypeConverters(DocumentConverter.class)
@JsonIgnoreProperties( ignoreUnknown = true )
@JsonTypeName("Documents")
public class Document
{
@JsonProperty("Name")
public String name;
@JsonProperty("URL")
public String url;
}
然后,我将能够从每个Product对象访问文档列表。但是,我也只想处理包含某些文档的产品。我可以通过上述查询获取所有产品,然后手动过滤所需的文档,但是当我只查找非常特定的文档时,这会变得很麻烦。
是否还可以基于Document变量查询而不将其作为单独的表?
类似...
@Query("SELECT * FROM Product WHERE Name = :name")
List<Product> getProducts(String name);
谢谢。
答案 0 :(得分:0)
您可以使用LIKE sql语句在json列中搜索转换后的文档列表。例: 假设我们已经将这样转换的文档存储在db中:
const res = await GpsLog.find({
'gps_time': {
$gte: 1539648000,
$lte: 1539820800
},
'location': {
'$geoIntersects': {
'$geometry': geoFence
}
}
}).lean().exec();
因此,您对清单中包含此类文档的产品的查询应如下所示:
{
name: "Title",
url: "Your_url"
}
哪里
SELECT * FROM Product WHERE Name = :name AND Documents LIKE :documentLikeExpr
%表示零个,一个或多个字符。
所以我们在这里要做的唯一一件事-使用SQL语言功能在列内搜索字符串的一部分。
答案 1 :(得分:0)
您无法查询Document类变量,因为它没有存储为单独的表。 @TypeConverter 批注将您的文档列表转换为一些预定义的数据类型,例如字符串。基本上,它将文档列表作为字符串Gson存储在Product表的列中,因此我们无法在SQL查询(如 Document.name )中访问Document类的字段 name 。 / p>
阅读 @CommonsWare here
提供的选项#2因此,要访问它,您必须为Document创建一个单独的表。