因为我想与我的代码(Node.js)保持一致
当我有一个查询并且需要使用id值(这是一个唯一的对象)搜索某些内容时,执行该查询的最佳方法是什么?
User.findOne({id: new ObjectId("82jf20k2k...")}...
OR
User.findOne({id: ObjectId("82jf20k2k...")}...
每次创建新实例并用对象填充内存似乎是错误的。
使用 new ObjectId 的唯一合理时间是在为所有其他操作插入数据时,我会使用 ObjectId ?
答案 0 :(得分:2)
检查source code:
$(document).ready(function(){
$("a.button").addClass('btn disabled');
$("a.remove").addClass('ui-state-disabled'); // this is my datatable remove button with class remove
$("a.button").css("margin-top", "-5px");
$("a.button").css("pointer-events", "none");
$('[type=file]').attr('disabled', 'disabled');
})
对于我来说,做/**
* Create a new ObjectID instance
*
* @class
* @param {(string|number)} id Can be a 24 byte hex string, 12 byte binary string or a Number.
* @property {number} generationTime The generation time of this ObjectId instance
* @return {ObjectID} instance of ObjectID.
*/
var ObjectID = function ObjectID(id) {
// Duck-typing to support ObjectId from different npm packages
if (id instanceof ObjectID) return id;
if (!(this instanceof ObjectID)) return new ObjectID(id);
this._bsontype = 'ObjectID';
// more code
或new
是一样的事情,好像它不是ObjectId("82jf20k2k...")
的实例一样,它将创建一个新实例并返回它。
答案 1 :(得分:0)
您应该使用第二个选项,即
User.findOne({id:ObjectId(“ 82jf20k2k ...”)} ...
您是对的第一个是在内存中创建不必要的对象。如果要在运行时生成ObjectID,应使用 New 关键字。
答案 2 :(得分:0)
您可以像这样使用它:
User.findOne({ id: "82jf20k2k..." })
不需要“ ObjectId()”,因为findOne会尝试将字符串转换为ObjectId。
此外,如果要按ID搜索文档,请使用findById,因为它更受欢迎。
答案 3 :(得分:0)
我建议您使用Model.findById()
而不是Model.findOne(_id:id)
来基于_id查找文档。
您还可以在Mongoose Documentation上找到更多信息。