7、db.ensureIndex(options, callback)

作用:

NeDB 支持索引。索引可以提高查询速度以及保证字段的唯一性。索引可以用在任何字段,包括嵌套很深的字段。目前,索引只能用来加速基本查询以及使用 $in, $lt, $lte, $gt 和 $gte 运算符的查询,如上 find 接口中示例所示。保证索引不为数组对象。方法可以在任何时候被调用,推荐在应用启动时就调用 (该方法是同步的, 为 1000 个文档添加索引仅需 35ms)。

参数:

fieldName(必须): 索引字段,使用“.” 给嵌套的字段加索引。

unique(可选,默认 false): 字段唯一性约束。注意:唯一性约束会增加为两个文档中没有定义的字段添加索引的错误。

sparse(可选,默认 false): 不能为没有定义的字段加索引。如果接受给多个文档中没有定义的字段添加索引,给需要该配置参数与 unique 一起使用。

expireAfterSeconds(可选,秒数): TTL 索引,设置自动过期时间。

删除索引: db.removeIndex(fieldName, cb)

注意:_id 字段会自动加索引和唯一性约束,不必再为它使用 ensureIndex。如果使用本地存储,索引也将保存在数据文件中,当第二次加载数据库时,索引也将自动被添加。如果加载一个已经有索引的数据库,删除索引将不起任何作用。

  1. db.ensureIndex({fieldName:'somefield'},function(err){
  2. // If there was an error, err is not null
  3. });
  4. // 对索引设置唯一性约束
  5. db.ensureIndex({fieldName:'somefield',unique:true},function(err){
  6. });
  7. // Using a sparse unique index
  8. db.ensureIndex({fieldName:'somefield',unique:true,sparse:true},function(err){
  9. });
  10. // 使用唯一性约束制造错误,查看err的格式
  11. db.insert({somefield:'nedb'},function(err){
  12. // err is null
  13. db.insert({somefield:'nedb'},function(err){
  14. // err is { errorType: 'uniqueViolated'
  15. // , key: 'name'
  16. // , message: 'Unique constraint violated for key name' }
  17. });
  18. });
  19. // 移除somefield字段的索引
  20. db.removeIndex('somefield',function(err){
  21. });
  22. // Example of using expireAfterSeconds to remove documents 1 hour
  23. // after their creation (db's timestampData option is true here)
  24. db.ensureIndex({fieldName:'createdAt',expireAfterSeconds:3600},function(err){
  25. });
  26. // You can also use the option to set an expiration date like so
  27. db.ensureIndex({fieldName:'expirationDate',expireAfterSeconds:0},function(err){
  28. // Now all documents will expire when system time reaches the date in their
  29. // expirationDate field
  30. });