簡體   English   中英

如何動態指定collection.find()函數

[英]How to specify function to collection.find() dynamically

如何將函數logic傳遞給find -function以便在每個文檔上使用它?

我試圖用屬性中的某些值遞歸地找到Mongo文檔。 我已經定義了一個“算法”,並希望對find -function做到這一點,但是盡管閱讀了有關查詢,搜索和find() ,但我還是沒有運氣。

// match every node with propertyname "Reference" with the exact value "43_1"
var logic = function(currentKey, currentValue) {
    return ( currentKey == "Reference" && currentValue === "43_1" );
};

db.getCollection('metavalg').find(function() {  
    function recurSearchObj(doc) {
        return Object.keys(doc).some(function(key) {
            if ( typeof(doc[key]) == "object" && doc[key] !== null ) {
                return recurSearchObj(doc[key]);
            } else {
                // invoke matching-logic
                return logic(key, doc[key]);
            }
        });
    }
    // search document recursively 
    return recurSearchObj(this);
})

在弗拉基米爾M的幫助下,我最終重新存儲了代碼並執行以下操作:

db.getCollection('metavalg').find(function() {  
    function inspectObj(doc, logic) {
        return Object.keys(doc).some(function(key) {
            if ( typeof(doc[key]) == "object" && doc[key] !== null ) {
                return inspectObj(doc[key], logic);
            } else {
                return logic(key, doc[key]);
            }
        });
    }
    return inspectObj(this, function(currentKey, currentValue) {
        return ( currentKey == "Nummer" && currentValue === "43_1" );
        //return ( currentKey == "Navn" && /max\.? 36/i.test(currentValue) );
    });
})

您可以將邏輯方法作為參數傳遞給遞歸搜索對象:

// match every node with propertyname "Reference" with the exact value "43_1"
var logic = function(currentKey, currentValue) {
    return ( currentKey == "Reference" && currentValue === "43_1" );
};

db.getCollection('metavalg').find(function() {  
    function recurSearchObj(doc, aLogic) {
        return Object.keys(doc).some(function(key) {
            if ( typeof(doc[key]) == "object" && doc[key] !== null ) {
                return recurSearchObj(doc[key], aLogic);
            } else {
                // invoke matching-logic
                if( aLogic(key, doc[key]) ){
                       // then do somthing 
                }
            }
        });
    }
    // search document recursively 
    return recurSearchObj(this, logic);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM