有没有办法对MongoDB进行同步查询?
我想在我从数据库中检索到所有数据后才运行一些代码。
这是一个剪切的样本。
代码段A
const brandExists = Brands.find({name: trxn.name}).count();
代码段B
if(brandExists == 0){
Brands.insert({
name:trxn.name,
logo:"default.png",
});
Trxs.insert({
userId,
merchant_name,
amt,
});
}
我希望代码片段B仅在代码片段A完成从数据库中检索数据后才能运行。怎么会这样做呢?
答案 0 :(得分:1)
您可以使用简单的async
函数async
函数始终返回一个承诺。
const brandExists;
async function brandExist() {
brandExists = Brands.find({
name: trxn.name
}).count();
}
brandExist().then(
// Your Code comes here
if (brandExists == 0) {
Brands.insert({
name: trxn.name,
logo: "default.png",
})
Trxs.insert({
userId,
merchant_name,
amt,
});
});
答案 1 :(得分:1)
我不认为使用if语句就像你有意义的那样:查询是在彼此之后发送的;其他人可能会创建一个与您在查询数据库时使用的品牌同名的品牌。
MongoDB有一些叫做唯一索引的东西,你可以使用它来强制唯一的值。您应该能够使用name
作为唯一索引。然后,当您将新文档插入集合时,如果已存在具有该名称的文档,则该文档将失败。
答案 2 :(得分:0)
在Meteor中,MongoDB查询是同步的,因此它已经提供了您所需要的。无需进行任何更改,代码段B代码只会在片段后运行代码。
当我们调用函数异步时,我们的意思是当调用该函数时它是非阻塞的,这意味着我们的程序将调用该函数并继续运行,或者不等待我们需要的响应。
如果我们的函数是同步的,这意味着我们的程序将调用该函数并等待它收到该函数的响应以继续执行该程序的其余部分。
Meteor基于Node,它本质上是异步的,但只使用异步函数编码可以源于开发人员称之为“callback hell”。
在服务器端,Meteor决定使用Fibers,它允许函数等待结果,从而产生同步式代码。
客户端没有光纤,因此每次客户端调用服务器方法时,该调用都将是异步的(您将不得不担心回调)。
您的代码是服务器端代码,感谢Fibers,您可以确保代码段B代码仅在代码代码段后运行。