如果我尝试覆盖现有的 indexed
字段,我就不会收到错误消息。
它应该是错误的,因为它不是update()
!
var loki = require('lokijs');
var db = new loki('test.json');
var users = db.addCollection('users', { indices: ['userID']});
users.insert(
{
'name': 'Anna',
'userID': 1
},
{
'name': 'Bernd',
'userID': 2
},
{
'name': 'Christa',
'userID': 3
});
db.save();
users.insert({'name': 'Dieter','userID': 2}); // this should error!!
如何在尝试插入现有用户ID时创建唯一索引以获取错误?
答案 0 :(得分:1)
indices
选项在字段上创建索引,这样可以更快地检索,因为索引存在于集合中的单独排序数组中(因此Loki可以使用二进制搜索而不是完整循环来获取记录)。但是,您正在寻找使用ensureUniqueIndex
创建的唯一索引(选中here,向下滚动到查找文档,有关于唯一索引的部分。)。有了它,您可以使用收集方法by(field, value)
(如果只传递字段值,它甚至可以进行调整),它使用唯一索引来充分发挥潜力(大约是索引字段速度的2倍)。请记住,您需要显式调用ensureUniqueIndex
,因为无法序列化和保留唯一索引。
更新:一旦调用了EnsureUniqueIndex方法,如果您尝试插入重复的密钥记录,该集合将抛出错误。如果您已检出存储库,则可以查看spec / generic / unique.spec.js以获取示例(here)
答案 1 :(得分:0)
var loki = require('lokijs');
var db = new loki('test.json');
var users = db.addCollection('users', { indices: ['userID']});
users.ensureUniqueIndex('userID');
users.on('error',function(obj){
console.log('error ... adding 1 to userID');
obj.userID = obj.userID+1;
return obj;
});
users.insert(
{
'name': 'Anna',
'userID': 1
});
users.insert(
{
'name': 'Bernd',
'userID': 2
});
users.insert(
{
'name': 'Christa',
'userID': 3
});
db.save();
console.log(users.data);
try {
users.insert({'name': 'Dieter','userID': 2}); // this should error!!
} catch(e){
var i = 2+1;
users.insert({'name': 'Dieter','userID': i}); // this should error!!
}
db.save();
db2 = new loki('test.json');
db2.loadDatabase({}, function () {
var users2 = db2.getCollection('users')
console.log(users2.data);
});
users.on('error',...)
和try{ users.insert...} catch(e){// id+1}
处理抛出的error
那是我的控制台:
[ { name: 'Anna',
userID: 1,
meta: { revision: 0, created: 1436186694342, version: 0 },
'$loki': 1 },
{ name: 'Bernd',
userID: 2,
meta: { revision: 0, created: 1436186694342, version: 0 },
'$loki': 2 },
{ name: 'Christa',
userID: 3,
meta: { revision: 0, created: 1436186694342, version: 0 },
'$loki': 3 } ]
Duplicate key for property userID: 2
[ { name: 'Anna',
userID: 1,
meta: { revision: 0, created: 1436186694342, version: 0 },
'$loki': 1 },
{ name: 'Bernd',
userID: 2,
meta: { revision: 0, created: 1436186694342, version: 0 },
'$loki': 2 },
{ name: 'Christa',
userID: 3,
meta: { revision: 0, created: 1436186694342, version: 0 },
'$loki': 3 },
{ name: 'Dieter',
userID: 2,
meta: { revision: 0, created: 0, version: 0 },
'$loki': 4 } ]