1

错误:“收集方法手表是同步的”。

我在 mongo atlas 中有一个数据库 whatsAppdb,现在想要使我的 mongodb 实时化,因此我在 mongodb 集合中使用 changestream,如代码所示,但是在执行此操作时会发生错误“集合方法监视是同步的”,如图所示。

如果我不编写 db.collection("Contact") 语句但应用程序在添加此语句后立即崩溃,则会在控制台日志中打印“Db is connected”。

/************************************/

    [    
const db =mongoose.connection;
db.once("open",function(){
    console.log("Db is connected");
});

const msgCollection = db.collection("Contact");
const changeStream = msgCollection.watch();

changeStream.on("change",function(change){
    console.log(change);
});

const contactsSchema = {
    id:Number,
    name : String,
    message:String,
    time:String

};

const Contact = mongoose.model("Contact", contactsSchema);

app.get("/message",function(req,res){
    Contact.find(function(err,findContact){
        if(!err){
            res.send(findContact);
        }else{
            res.send(err);
        }
    });
});

app.post("/",function(req,res){
    Contact.create(req.body,function(err,data){
        if(!err){
            res.send(data);
        }else{
            res.send("Try Agian.");
        }
    });
});



app.listen(8000,function(err){
    if(!err){
        console.log("server started at port 8000");
    }else{
        console.log(err);
    }
});]

错误截图

4

2 回答 2

1

只需在数据库连接处添加等待。

await db.once("open", () => {
  console.log("DB connected");
});

于 2021-06-30T08:06:58.600 回答
0

您的问题是没有确保在您建立数据库连接后调用您的 watch 函数。连接到 mongo 是异步的。当您调用更改流时。您可能还没有连接。你应该像这样修改你的代码。

db.once("open",function(){
    console.log("Db is connected");
const msgCollection = db.collection("Contact");
const changeStream = msgCollection.watch();

changeStream.on("change",function(change){
    console.log(change);
});
});

于 2020-12-29T02:13:15.817 回答