尝试在embedded字段上确保索引时出错(键名不能包含“。”)

我们已经使用了mongodb / nodejs驱动几年了,目前正在使用最新的驱动/ mongodb数据库升级我们的系统。 除了索引,大部分情况都很顺利。

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

这是我们目前的版本:

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

这是一个testing样本:

 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( {"ac":1} , {background:true, w:1}, function(err, indexName) { console.log(err); //test.equal(null,err); db.close(); }); }); 

运行testing的结果是:

 $ 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 ac must not contain \'.\'', writeErrors: [ { index: 0, code: 14, errmsg: 'key ac must not contain \'.\'' } ] } 

是否有可能警告 js-bson: Failed to load c++ bson extension与此问题有关? 或者是否有用于创build索引的语法有问题?

任何帮助将不胜感激!

如果有人还有兴趣。 问题是与分配给索引的默认名称。 由于它是由字段名构build的,因此它包含一个点。 你可以直接明确地命名你的索引。 只要将“name”字段添加到ensureIndex函数调用的选项参数中即可。

我用mongojs v2.4.0和mongod v3.2.1解决了类似的错误信息。

当我尝试在嵌套字段上创build索引时,出现此错误,但索引已经存在于不同的选项中。 例如{"unique" : true}选项集。 同样,错误消息只是超级混淆,因为在以下情况下,使用点符号的相同嵌套键成功:

  • 如果我尝试使用相同的选项创build(已有的)索引
  • 如果我尝试创build失败的索引,它会成功

我刚刚testing了与MongoDB 2.6.5相同的代码,实际上它工作正常。 2.0.5驱动程序和MongoDB 2.4.12之间似乎存在兼容性问题