对新引入的字段进行索引和排序

问题描述 投票:0回答:1

我的文档结构如下:

{
  "_id": "6ed3d427045228dce9e3b38d111cb046",
  "_rev": "1-952bddae5572fbf2b0ce4a165c19c98b",
  "type": "USER",
  "name": "ABC",
  "email": "[email protected]",
  "phone": "024578963"
}

这是NodeJS应用,我正在使用couchdb-nano。为了进行排序(例如获取用于分页的数据),我为上述字段(nameemailphone)创建了一个索引。

已将一个名为created_date的新字段引入文档,并且所有最新文档均包含created_date,如下所示:

{
  "_id": "6ed3d427045228dce9e3b38d111cb046",
  "_rev": "1-952bddae5572fbf2b0ce4a165c19c98b",
  "type": "USER",
  "name": "ABC",
  "email": "[email protected]",
  "phone": "024578963",
  "created_date": 1570528394252
}

因此,自某个时间以来所有最新文档都包含created_date,而旧文档在文档中没有created_date字段。

[当我尝试按以下方式排序时:

const q = {
      selector : {
        type: { "$eq": "USER" },
      },
      fields : ['name', 'email', 'phone', 'created_date'],
      limit: 100,
      skip: 10,
      sort : [{"created_date":"asc"}]
    };
await prodresdb.find(q);

我将无法获得不包含created_date的旧文档。这是因为created_date索引不会索引旧文档,因为那些旧文档没有created_date字段。

我确信其他人也有这个问题,需要弄清楚...如何克服这个问题?有任何CouchDB方法可以解决此问题吗?此类问题的最佳实践是什么。

我的文档结构如下:{“ _id”:“ 6ed3d427045228dce9e3b38d111cb046”,“ _rev”:“ 1-952bddae5572fbf2b0ce4a165c19c98b”,“ type”:“ USER”,“ name”:“ ABC”,“ email”:“ [email protected]“,” ...

node.js database sorting couchdb couchdb-nano
1个回答
0
投票

我进行了一些测试,发现CouchDB如果不包含_find中指定的字段(属性),则sort结果中根本不包括文档。当将CouchDBPouchDB一起使用时,这尤其令人讨厌,因为后者包括了此类文档。

© www.soinside.com 2019 - 2024. All rights reserved.