node.js – 在嵌入字段上尝试ensureIndex时出错(键名不能包含“.”)

我们一直在使用
mongodb / nodejs驱动程序几年,目前正在使用最新的驱动程序/ mongodb数据库升级我们的系统.除索引外,一切顺利.

尝试使用collection.ensureIndex函数添加索引时出错.这是我的第一个问题,所以我会尽量详细说明.我没有发现任何相关问题……

这是我们当前的版本:

>节点:v0.10.33
> Mongodb驱动程序:v2.0.5
> Mongodb数据库:v2.4.12

这是一个测试样本:

var MongoClient = require('mongodb').MongoClient,
  test = require('assert');
MongoClient.connect('mongodb://localhost:28888/test', function(err, db) {
  var collection = db.collection('ensureIndexEmbedded');
  // Create an index on the a field
  collection.ensureIndex( {"a.c":1}
    , {background:true, w:1}, function(err, indexName) {
      console.log(err);
      //test.equal(null,err);
      db.close();
  });
});

以及运行测试的结果:

$node testindex.js
js-bson: Failed to load c++ bson extension, using pure JS version
{ [MongoError: n/a]
  name: 'MongoError',
  message: 'n/a',
  ok: 1,
  n: 1,
  code: 14,
  errmsg: 'key a.c must not contain \'.\'',
  writeErrors: [ { index: 0, code: 14, errmsg: 'key a.c must not contain \'.\'' } ] }

是否有可能警告js-bson:无法加载c bson扩展名与此问题相关联?或者用于创建索引的语法有什么问题吗?

任何帮助将非常感谢!

最佳答案 如果有人仍然感兴趣.问题在于分配给索引的默认名称.由于它是由字段名称构造的,因此它包含一个点.您可以简单地明确命名索引.只需将“name”字段添加到ensureIndex函数调用的options参数中,它应该没问题.

点赞