我已经看到了许多在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);
}
}
})
}
答案 0 :(得分:3)
您必须阅读有关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]);
}
注意:由于它包含一些数据库操作,我没有经过测试。
答案 1 :(得分:1)
您可以使用count,但不会检索条目。它依赖于mongoDB的count operation:
Counts the number of documents in a collection.
Returns a document that contains this count and as well as the command status.
答案 2 :(得分: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);
};