0

我在一些收藏中有一些关系记录。我为此使用对象 ID。我想找到一个没有集合查找功能的对象。

是否可以像这样在 db 上使用全局查找功能?

db.globalfind({_id:"12345678901234567890"});
4

2 回答 2

2

MongoDB 中的操作只对一个集合起作用。如果要对多个集合进行查找,则需要运行多个查询 - 每个集合一个。当然,Mongoose 可以为此实现一个便利功能,但我认为它没有,也不应该,因为它违反了 MongoDB 的范例之一。

于 2013-06-29T20:41:42.553 回答
0

MongoDB 并不真正支持根据它的 objectID 获取任意文档。但是,您可以使用下面的代码来搜索整个数据库:

var objectID = ObjectId("53623db53004e212edcc8fe6");
var findMultiple = true;

// ----------------------- code -----------------------
var stack = [];
db.getCollectionNames().forEach(function(collName) {
    var docs = db.getCollection(collName).find(); 
    docs.forEach(function(doc) {
        doc._FROM = collName;
        stack.push(doc);
    });
});

while(stack.length > 0) {
    var doc = stack.pop();
    if(doc._id) {
        if(doc._id.toString() === objectID.toString()) {
            print(doc);
            if(!findMultiple) {
                stack = [];
            }
        }
    }
    for (var property in doc) {
        var value = doc[property];
        var type = Object.prototype.toString.call(value);
        if (type === '[object Object]' || type === '[object Array]' || type ==='[object bson_object]') {
            value._FROM = doc._FROM + "/" + property;
            stack.push(value);
        }
    }
}
于 2014-05-02T18:48:36.063 回答