Couchdb 可空字段上的Cloudant排序

Couchdb 可空字段上的Cloudant排序,couchdb,cloudant,Couchdb,Cloudant,我想对一个字段排序,比如说name,它在Cloudant DB中被索引。我通过使用不带排序的索引来获取所有包含此名称字段和不包含此名称字段的文档。但是,当我尝试使用name字段进行排序时,我没有得到文档中没有此name字段的文档 有没有办法通过使用查询索引来做到这一点。我希望所有文档都按排序,并且没有名称字段 例如: 以下是一些文件: { "_id": 1234, "classId": "abc", "name"

我想对一个字段排序,比如说name,它在Cloudant DB中被索引。我通过使用不带排序的索引来获取所有包含此名称字段和不包含此名称字段的文档。但是,当我尝试使用name字段进行排序时,我没有得到文档中没有此name字段的文档

有没有办法通过使用查询索引来做到这一点。我希望所有文档都按排序,并且没有名称字段

例如: 以下是一些文件:

{
 "_id": 1234,
 "classId": "abc",
 "name": "Happa"
}
{
  "_id": 12345,
  "classId": "abc",
  "name": "Prasanth"
}
{
  "_id": 123456,
  "classId": "abc",
}
下面是我试图执行的查询:

{
  "selector": {
    "classId": "abc",
    "name" :{
      "or" : [
        {"$exists": true},{"$exists": false}
      ]
    }
  },
  "sort": [{ "classId": "asc" }, { "name": "asc" }],
  "use_index": "idx-classId_name"
},

我希望所有文档都按排序顺序返回,包括没有名称字段的文档。

您的查询对我来说毫无意义。您正在请求一个包含或不包含特定字段(指每个文档)的文档列表,并希望在此字段中对可能存在或不存在的文档进行排序。这样的顺序不是开箱即用的

我将从选择器中删除name子句,只对每个文档中出现的classId字段进行排序,然后在客户端进行二次偏序,这样您就可以决定如何将没有name字段的文档与有name字段的文档混合

另一种解决方案是使用视图而不是Cloudant查询索引。我没有对此进行测试,但希望其意图是明确的:

function(doc) {
    if (doc && doc.classId) {
        var name = doc.name || "[notfound]";
        emit(doc.classId+"-"+name, 1);
    }
}
这将在“classId名称”上键入文档,对于没有名称的文档,则键入指定的sentinel值


查询视图应返回按此复合键按字典顺序排列的文档(如果愿意,可以使用查询参数进行反转)。

如果您在本例中指定了“索引”的含义,则会有所帮助。这是一个标准的MapReduce视图,还是一个Cloudant搜索(又名Lucene)索引,还是一个Cloudant查询索引?我不清楚你在问什么——你想要按特定字段排序的文档,包括那些没有字段的文档?您希望如何在不存在的字段上对文档进行排序?请给出一些示例文档,并告诉我们您期望的订单。@xpqz很抱歉不清楚。添加了必要的信息。感谢@xpqz的澄清