Car*_*sel 7 mongodb node.js monk
我有一种方法可以根据ObjectID在我的数据库中查找文档:
      console.log('id: ' + id + ' type: ' + typeof id);
      collection.findOne({'_id':new ObjectID(id)}, function(error,doc) {
        if (error) {
          callback(error);
        } else {
           callback(null, doc);
        }
      });
当我运行它时,我收到以下错误:
/myPath/node_modules/monk/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/base.js:245
    throw message;      
          ^
Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (/myPath/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js:38:11)
at /myPath/collectionDriver.js:134:41
这是指collection.findOne()上面的一行.
我在调用之前的控制台日志输出id为24个十六进制字符的字符串:
id: "55153a8014829a865bbf700d" type: string
在此之前,我将id从一个对象转换为一个字符串,JSON.stringify()但它似乎成功运行,如我的console.log所示.
db.myCollection.findOne({_id : ObjectId("55153a8014829a865bbf700d")})在Robomongo中运行会带来预期的结果.
Car*_*sel 13
在这种情况下,传入我的函数的id已经是一个对象ID,所以不需要从它创建一个新的ObjectID.
当ObjectID被注销到控制台时,它们显示为十六进制字符串,而不是ObjectID("hexString"),所以我认为我需要转换它来执行查找,但它已经是我需要的格式.
小智 5
尝试这个:
var hex = /[0-9A-Fa-f]{6}/g;
id = (hex.test(id))? ObjectId(id) : id;
collection.findOne({'_id':new ObjectID(id)}, function(error,doc) {
  if (error) {
    callback(error);
  } else {
    callback(null, doc);
  }
});
| 归档时间: | 
 | 
| 查看次数: | 27888 次 | 
| 最近记录: |