代码之家  ›  专栏  ›  技术社区  ›  kartik

pouchdb中的自动增量id(_I)

  •  1
  • kartik  · 技术社区  · 8 年前

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

    3 回复  |  直到 7 年前
        1
  •  0
  •   Adam Beleko    3 年前

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

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

    例如,在文档对象中:

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

        2
  •  0
  •   user3531208    4 年前

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

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

    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);
    

    结果行将获得所有文档,但我们已按降序对其进行排序,并将其限制为一个。你有一个物体,所以我们已经努力了。默认情况下,pocket将返回一个字符串,因此我们对其进行解析,并对引号进行切片。然后我们必须加+1来增加它。然后,pocket将不接受数字,因此您必须再次将其转换为string(phew``)/完成。

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

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

    上述方法速度快得多,可以节省大量开销,但是您需要使用[object object]和[object-Promise]进行定向。我相信这个承诺会让人惊讶。

    一切顺利!!

        3
  •  0
  •   ßãlãjî    4 年前

    Pouchdb柱

    它自动生成

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

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

    https://pouchdb.com/api.html