使用针对cloudant和couchdb 2.0的mango查询对数组中的项进行索引和查询
我有以下数据库结构:使用针对cloudant和couchdb 2.0的mango查询对数组中的项进行索引和查询,couchdb,cloudant,couchdb-mango,Couchdb,Cloudant,Couchdb Mango,我有以下数据库结构: {"_id": "0096874","genre": ["Adventure","Comedy", "Sci-Fi" ]} {"_id": "0099088","genre": ["Comedy", "Sci-Fi", "Western"]} 我喜欢像在mongodb中一样查询它 db.movies.find({genre: {$in: ["Comedy"]}}) 当我对整个数据库使用文本索引时,它会起作用,但这似乎非常浪费: // index {
{"_id": "0096874","genre": ["Adventure","Comedy", "Sci-Fi" ]}
{"_id": "0099088","genre": ["Comedy", "Sci-Fi", "Western"]}
我喜欢像在mongodb中一样查询它
db.movies.find({genre: {$in: ["Comedy"]}})
当我对整个数据库使用文本索引时,它会起作用,但这似乎非常浪费:
// index
{
"index": {},
"type": "text"
}
//query
{
"selector": {
"genre": {
"$in": ["Comedy"]
}
},
"fields": [
"_id",
"genre"
]
}
以下索引不起作用:
{
"index": {
"fields": [
"genre"
]
},
"type": "json"
}
cloudant查询的正确索引是什么,它不索引整个数据库?
谢谢你的帮助你说得几乎正确。您的索引是正确的,但是您需要添加一个选择器来获取所有ID 正如Tony所说,就性能而言,这不是一个很好的解决方案 这之所以有效,也是因为Mango对所有文档执行上述$in操作作为过滤机制。正如我们在上一节关于JSON语法的结论中所看到的,上面的查询的性能折衷是,它本质上执行完整的索引扫描,然后应用过滤器
很遗憾,mango需要进行过滤操作。在mongodb中,可以在数组上放置一个实索引。难道不能在couchdb中进行一个简单的映射,其中所有数组成员都是单独发出的吗?(doc)->如果是doc.genre,则是doc.genre.forEach(项目)->发出项目。就我的2ct。那么我如何在类似数组的值上使用替代的和更高性能的呢?我看不到一种使用cloudants的新索引方法的方法,我不确定这样的东西应该放在哪里
{
"selector": {
"_id": {
"$gt": null
},
"genre": {
"$in": ["Western"]
}
},
"fields": [
"_id",
"genre"
],
"sort": [
{
"_id": "asc"
}
]
}