【发布时间】:2013-06-06 06:38:26
【问题描述】:
让我解释一下这个问题。我使用 node-mongodb-native 作为 mongodb 驱动程序,每次我需要通过 _id 字段进行查找查询时,我都必须将其转换为 ObjectId,如下所示:
var ObjectID = require('mongodb').ObjectID;
db.collection.find({_id: new ObjectID('51b02413453078800a000001')},
function (err, docs) {
...
});
我不想为每个请求都转换为 ObjectID。到目前为止,我发现的单一解决方案是将自定义 ObjectID 生成为字符串,如下所示:
var CustomPKFactory = {
createPk: function() {
return new ObjectID().toString();
}
};
var mongoClient = new MongoClient(new Server('localhost', 27017), {
pk: CustomPKFactory,
});
在这种情况下,我将 _id 作为字符串,我不需要分别将其转换为 ObjectID。但我不知道它将如何影响查询性能。
你能告诉我这种方法的优点和缺点吗?
【问题讨论】:
-
String 将在索引中使用更多空间,我也可以想象它的性能会降低,除了您可以在不将所有内容包装在
ObjectId的情况下进行查询之外,并没有太多优势 -
好的。是否可以防止在每个查询中转换为 ObjectId?
-
嗯,也许你可以创建一个扩展的
model类,在它的查找函数中,发现你是否正在通过_id搜索,如果你将它转换为 ObjectId -
我发现它不是那么方便,因为我可以通过作者或任何具有 ObjectID 类型的字段找到。
-
那么没有真正简单的方法,因为只有您知道哪些字段应该是 ObjectId,唯一的另一种方法是扩展我之前的评论以包括存储在模型中的字段列表,这些字段将被翻译在查询中使用 ObjectIds,但老实说,这将是矫枉过正
标签: node.js mongodb mongodb-query node-mongodb-native