3

我已经看到了很多在 mongoDB 中查找文档的方法,这样就不会影响性能,即您并没有真正检索到文档;相反,如果文档存在与否,您只需检索 1 或 0 的计数。

在 mongoDB 中,可以这样做:

db.<collection>.find(...).limit(1).size()

在猫鼬中,您要么有回调,要么没有。但在这两种情况下,您都是在检索条目而不是检查计数。我只是想要一种方法来检查文件是否存在于猫鼬中——我不想要文件本身。

编辑:现在摆弄异步 API,我有以下代码:

for (var i = 0; i < deamons.length; i++){
    var deamon = deamons[i]; // get the deamon from the parsed XML source
    deamon = createDeamonDocument(deamon); // create a PSDeamon type document
    PSDeamon.count({deamonId: deamon.deamonId}, function(error, count){ // check if the document exists
        if (!error){
            if (count == 0){
                console.log('saving ' + deamon.deamonName);
                deamon.save() // save
            }else{
                console.log('found ' + deamon.leagueName);
            }
        }
    })
}
4

3 回答 3

4

您必须阅读有关 javascript 范围的信息。无论如何尝试以下代码,

for (var i = 0; i < deamons.length; i++) {
    (function(d) {
        var deamon = d
        // create a PSDeamon type document
        PSDeamon.count({
            deamonId : deamon.deamonId
        }, function(error, count) {// check if the document exists
            if (!error) {
                if (count == 0) {
                    console.log('saving ' + deamon.deamonName);
                    // get the deamon from the parsed XML source
                    deamon = createDeamonDocument(deamon);
                    deamon.save() // save
                } else {
                    console.log('found ' + deamon.leagueName);
                }
            }
        })
    })(deamons[i]);
}

注意:由于它包含一些数据库操作,我没有经过测试。

于 2013-10-29T21:12:31.377 回答
1

您可以使用count,它不会检索条目。它依赖于 mongoDB 的计数操作

Counts the number of documents in a collection. 
Returns a document that contains this count and as well as the command status. 
于 2013-10-29T20:05:14.540 回答
0

我发现这种方式更简单。

let docExists = await Model.exists({key: value});
console.log(docExists);

否则,如果您在函数中使用它,请确保该函数是async.

let docHandler = async () => {
   let docExists = await Model.exists({key: value});
   console.log(docExists);
};
于 2020-11-18T19:00:09.273 回答