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。
我在 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。