pouchdb 中的自动增量_id

AutoIncrement _id in pouchdb

我在 pouchDB 中实现了一个队列,其中每条记录都存储为一个单独的文档。每条记录都类似于一个 post 请求,因此当用户离线时我可以将请求保存在队列中,稍后在用户在线时将其推送到服务器。所有请求都必须按照与它们生成时相同的顺序进行处理。但问题是 pouch 数据库中没有 _id 序列。所以每次生成一个随机id,序列就丢失了。我该怎么做才能以与保存在数据库中相同的顺序获取记录。我正在使用 pouchDB 和 IonicFramework。 谢谢。

来自@fiatjaf: 在 PouchDB

中自动递增 _id 是不可能的(或不是最优的)

但是,您可以选择使用时间戳作为 _id

例如,在您的文档对象中:

doc = { _id : Date.now(), name: 'Pouch DB', description: 'The best DB' }

自动递增是不可能的。然而,这就是我所做的。

假设您正在通过表单发布内容。 你是这样收到的

const fromform = req.body.fieldname;

然后在添加它并递增 _id 之前,您可以调用 alldocs 方法。

database.allDocs({include_docs: true,descending: true,limit:1}).then(function(result){
// the rest of the code goes here
});

然后就可以用这个结果进行迭代,再加一个数字

result.rows.map(function(item) {
            var pusher=JSON.stringify(item.id, null, 4);
            var idf=parseInt(pusher.slice(1,-1),10)
            var addidf=idf+1;
            var sid=addidf.toString();
            doc = {
                _id : sid,
                name: 'field_from_form',
                tagline : fromform // this is also field from form
                }
                    database.put(doc, function(err, response) {
                        if (err) {
                        return console.log(err);
                        } else {
                        console.log("Document created Successfully");
                        res.send("Collection Updated" + JSON.stringify(doc));
                        }
                        console.log("The new array in add tag is pushed is : "+addidf);   
                        });
             });
        }, function(error) {
            res.status(400).send(error);

结果行将为您提供所有文档,但我们已将其降序排列并将其限制为一个。你有一个物体,所以我们把它弄脏了。默认情况下,pouch 将 return 一个字符串,因此我们解析它并分割引号。然后我们必须添加 +1 来增加它。然后 pouch 将不接受数字,所以你必须再次将它转换为字符串(phew``)/你完成了。

是的,这不是一个好方法,但袋子的速度很快。我想我们可以忽略它。

还有另一种方法。 您也可以致电

db.info().then(info=> console.log(info.doc_count))

上述方法要快得多,并且会为您节省很多开销,但是您需要对 [object Object] 和 [object Promise] 有所了解。我相信诺言会引起人们的注意。

一切顺利!!

Pouchdb post

自动生成

db.post(doc, [options], [callback])

创建一个新文档并让 PouchDB 为其自动生成一个 _id。

https://pouchdb.com/api.html