1
CentOS 7上的My RethinkDB 1.16.2-1“store”数据库有一个“products”表,它有一个“models”数组。我想回到的产品ID,并包含“isCatalogPick”布尔并省略车型全系车型没有它,就像这样:RethinkDB:查询嵌套的可选布尔字段
{
"id": "mid-200" ,
"models": [
{
"isCatalogPick": true ,
"ssp": 20.95 ,
"weight": 0.07
} ,
{
"isCatalogPick": true ,
"ssp": 22.95 ,
"weight": 0.13
}
]
} {
"id": "msc-000" ,
"models": [
{
"ssp": 39.95 ,
"isCatalogPick": true ,
"weight": 0.17
}
]
}
我的查询:
r.db("store").table("products").pluck("id", "models").filter(
r.row("models")("isCatalogPick").contains(true)
)
也回归模型没有“isCatalogPick”大概是因为我使用的包含():
{
"id": "mid-200" ,
"models": [
{
"ssp": 14.95 ,
"weight": 0.24
} ,
{
"ssp": 17.95 ,
"weight": 0.08
} ,
{
"isCatalogPick": true ,
"ssp": 20.95 ,
"weight": 0.07
} ,
{
"ssp": 22.95 ,
"weight": 0.13
}
]
} {
"id": "msc-000" ,
"models": [
{
"ssp": 39.95 ,
"isCatalogPick": true ,
"weight": 0.17
}
]
}
你会认为,替代“包含()”与“EQ()”中的查询可以解决这个问题,但它不返回任何结果。
我的问题是,我将如何实现这一目标?不是必需的,但如果你能花时间来解释为什么下面的查询也没有工作,我认为这将是教育的全部:
r.db("store").table("products").pluck("id", "models").filter(
r.row("models")("isCatalogPick").eq(true)
)
r.db("store").table("products").pluck("id", "models").filter(
r.row("models").hasFields("isCatalogPick")
)
r.db("store").table("products").pluck("id", "models").filter(
r.row("models").filter(function (c) {return c("isCatalogPick").eq(true)})
)
r.db("store").table("products").pluck("id", "models").filter(
function(c) {
return c.hasFields({'models': {'isCatalogPick': true}})
}
)
r.db("store").table("products").pluck("id", "models").concatMap(r.row('models')).filter(function(m) {
return m.hasFields("isCatalogPick")
})
r.db("store").table("products").map(function (doc) {
return {images: doc("id"), models: doc("models")}
}).filter(
r.row("models").filter(function(c){
return c("isCatalogPick").eq(true)
})
)
谢谢。第一个(虽然对我来说更复杂)性能稍微好一点(〜400ms vs〜450ms)。你能告诉我为什么以下不起作用?这似乎是最直观的解决方案。 r.db(“store”)。table(“products”)。pluck(“id”,“models”)。filter( r.row(“models”)(“isCatalogPick”)。eq(true) ) – Smyrnian 2015-04-03 00:04:24
'r.row(“models”)(“isCatalogPick”)'是一组布尔值,不等于true。 – AtnNn 2015-04-03 00:22:05
我明白了。这个(我承诺的最后一个)如何: r.db(“store”)。table(“products”)。pluck(“id”,“models”)。 .hasFields(“isCatalogPick”) ) – Smyrnian 2015-04-03 00:37:01