使用针对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"
    }
  ]
}