pouchdb中的AutoIncrement _id

时间:2016-09-09 09:18:37

标签: ionic-framework pouchdb nosql

我在pouchDB中实现了一个队列,其中每个记录都存储为一个单独的文档。每条记录都类似于一个帖子请求,因此当用户离线时,我可以将请求保存在队列中,然后在用户上线后立即将其推送到服务器。必须按照生成的顺序处理所有请求。但问题是囊db中没有_id序列。因此,每次生成随机id并且序列丢失。如何以与保存在数据库中相同的顺序获取记录。我正在使用pouchDB和IonicFramework。 感谢。

3 个答案:

答案 0 :(得分:1)

来自@fiatjaf: 在PouchDB中不可能(或不是最佳)自动递增_id

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

答案 1 :(得分:0)

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

让我们说您正在从表单中发布内容。 您会收到这样的消息

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将返回一个字符串,以便我们解析它并对引号进行切片。然后,我们必须添加+1以使其递增。然后小袋将不接受数字,因此您必须再次将其转换为字符串(phew``)/完成。

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

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

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

上述方法速度更快,可以节省很多开销,但是您需要在[object Object]和[object Promise]方面有所了解。我敢保证诺言会引起人们的注意。

一切顺利!

答案 2 :(得分:0)

Pouchdb 帖子

自动生成

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

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

https://pouchdb.com/api.html