我正在使用 NodeJs 和 MongoDB(没有猫鼬)并且我想要:
mongoClient.connect(serverUrl, { useUnifiedTopology: true }, function (err, client) {
if (err) { throw err};
var db = client.db(useDB);
db.collection(data.to).countDocuments({}, function (err, names) {
if (names == 0) {
db.collection(data.to).insertOne(defaultCollec);
return console.log('Created:'+data.to)
}
if (err) console.log(err)
}).then(function (db) {
//Do stuff after creation
return console.log('After Creation')
});
错误:
Cannot read property 'then' of undefined
我对链接和箭头功能感到非常痛苦...
答案 0 :(得分:0)
countDocuments
在 nodejs
中有 4 个可能的签名:
countDocuments(callback: MongoCallback<number>): void;
countDocuments(query: FilterQuery<TSchema>, callback: MongoCallback<number>): void;
countDocuments(query?: FilterQuery<TSchema>, options?: MongoCountPreferences): Promise<number>;
countDocuments(query: FilterQuery<TSchema>, options: MongoCountPreferences, callback: MongoCallback<number>): void;
您正在尝试同时使用 2 个签名,您正在使用不返回任何内容的回调签名,然后您正在尝试对该空值使用 then
方法(一个承诺函数)。
如果您出于某种原因更喜欢使用回调而不是承诺,那么您需要使用 Promise
将其包装起来以保留逻辑,如下所示:
return new Promise((resolve, reject) => {
db.collection(data.to).countDocuments({}, function (err, names) {
if (names == 0) {
db.collection(data.to).insertOne(defaultCollec);
return console.log('Created:'+data.to)
}
if (err) console.log(err);
resolve(console.log('After Creation'))
})
})
答案 1 :(得分:0)
mongodb 有回调函数
mongoClient.connect(serverUrl, { useUnifiedTopology: true }, function (err, client) {}
突出显示的文本是 cb(){} 或尝试删除它并尝试以下内容,
mongoClient.connect(serverUrl, { useUnifiedTopology: true })
.then()
.catch()