我在pouchDB中实现了一个队列,其中每个记录都作为一个单独的文档存储。每条记录类似于post请求,因此当用户脱机时,我可以将请求保存在队列中,然后在用户联机后将其推送到服务器。所有请求都必须按照生成的顺序进行处理。但问题是,在眼袋数据库中没有_id序列。因此,每次产生一个随机id,序列就会丢失。我能做些什么来获得与保存在数据库中的记录相同的顺序。我使用的是pouchDB和IonicFramework。谢谢。
发布于 2019-09-14 12:55:57
From @fiatjaf:在_id中不可能(或者不是最优的)有自动增量的PouchDB。
但是,您可以选择使用时间戳作为_id。
例如,在doc对象中:
doc = { _id : Date.now(), name: 'Pouch DB', description: 'The best DB' }
发布于 2020-06-14 14:06:24
自动增值是不可能的。然而,这就是我所做的。
让我们说你正在从表单中张贴一些东西。你就这样接受它
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来增加它。然后邮袋将不接受数字,所以您必须再次将它转换为string (phew)/您完成了。
是的,这不是一个好的方法,但与照明速度的邮袋。我想我们可以忽略它。
另一条路在那里。您也可以调用
db.info().then(info=> console.log(info.doc_count))上面的方法速度更快,可以节省大量的开销,但是您需要在某种程度上使用对象对象和对象承诺来面向对象。我敢肯定,承诺会引起人们的注意。
万事如意!!
发布于 2021-03-26 11:29:34
Pouchdb post
它自动生成
db.post(doc, [options], [callback])创建一个新文档,让PouchDB自动为它生成一个_id。
https://stackoverflow.com/questions/39408076
复制相似问题