所以我想做的是使findOne
工作更像在Meteor中,但要通过Mongo shell。简而言之,我希望能够执行类似的操作db.collection.findOne("thisIsAnId")
并在该集合中查找该ID。
我尝试加载包含此文件的文件...
db.collection.findOne = function(query, fields, options){
if(typeof query === "string") {
return db.collection.originalFindOne({_id : query}, fields, options);
}
return db.collection.originalFindOne(query, fields, options);
}
originalFindOne
仅在哪里链接到default findOne
,这根本不起作用。因此,在没有运气找到覆盖默认函数的方法之后,我想也许我可以创建一个新的函数之类的db.collection.simpleFindOne()
,但是我找不到一种将其附加到mongo shell的方法,以便任何集合都可以使用它。 。
任何人都对mongo内部工作原理有一些见识,可以给我一些帮助吗?
尝试将此代码段添加到您的Mongo配置文件之一:
(function() {
// Duck-punch Mongo's `findOne` to work like Meteor's `findOne`
if (
typeof DBCollection !== "undefined" && DBCollection &&
DBCollection.prototype && typeof DBCollection.prototype.findOne === "function" &&
typeof ObjectId !== "undefined" && ObjectId
) {
var _findOne = DBCollection.prototype.findOne,
_slice = Array.prototype.slice;
DBCollection.prototype.findOne = function() {
var args = _slice.call(arguments);
if (args.length > 0 && (typeof args[0] === "string" || args[0] instanceof ObjectId)) {
args[0] = { _id: args[0] };
}
return _findOne.apply(this, args);
};
}
})();
我最初是DBCollection
通过db.myCollection.constructor
在Mongo shell中键入来找到对象/类的。然后,我findOne
通过验证(a)DBCollection
是否可全局访问,(b)DBCollection.prototype
存在和(c)typeof DBCollection.prototype.findOne === "function"
(类似于代码段)来确认其原型是否已定义。
编辑:添加了一个逻辑分支,以涵盖基于ObjectId的ID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句