0

いくつかのコレクションにいくつかのリレーショナル レコードがあります。これにはオブジェクト ID を使用します。そして、コレクション検索機能なしでオブジェクトを検索したい。

このように db でグローバル検索機能を使用することは可能ですか?

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

2 に答える 2

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 に答える