Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ionic framework 数据库中的自动增量_id_Ionic Framework_Pouchdb_Nosql - Fatal编程技术网

Ionic framework 数据库中的自动增量_id

Ionic framework 数据库中的自动增量_id,ionic-framework,pouchdb,nosql,Ionic Framework,Pouchdb,Nosql,我在PockDB中实现了一个队列,其中每个记录都存储为一个单独的文档。每个记录类似于post请求,因此当用户脱机时,我可以将请求保存在队列中,然后在用户联机时将其推送到服务器。所有请求都必须按照生成它们的相同顺序进行处理。但问题是在邮袋数据库中没有_id序列。因此,每次生成一个随机id,序列就会丢失。我可以做什么来获取与保存在数据库中的记录顺序相同的记录。我正在使用PockDB和IonicFramework。 谢谢。来自@fiatjaf: 在数据库中不可能(或不是最佳)有自动递增\u id 但是

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

来自@fiatjaf: 在数据库中不可能(或不是最佳)有自动递增
\u id


但是,您可以选择使用时间戳,因为自动递增是不可能的。然而,这就是我所做的

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

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来增加它。然后邮袋将不接受数字,所以您必须再次将其转换为字符串(phew``)/您完成了

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

还有一条路。 你也可以打电话给

db.info().then(info=> console.log(info.doc_count))
上述方法速度更快,并将为您节省大量开销,但您需要使用[object object]和[object Promise]进行定向。我相信这个承诺会引起人们的注意


祝你一切顺利

它是自动生成的

db.post(doc, [options], [callback])
创建一个新文档并让PockDB自动为其生成一个_id


为什么不使用时间戳作为
\u id
?我试过了。它很好用。Thanks@fiatjaf你应该在回答中提到同样的问题(出于社区目的),我不这么认为。这不是一个“规范”的答案。它不适合每个人的用例,这就是为什么我问。简短而绝对正确的答案是:在数据库中不可能有自动增量
\u id