Mongoose,如何清空一个集合。

5
我有一个hapi.js服务器
const Hapi = require('hapi')
const Mongoose = require('mongoose')
const Wreck = require('wreck');


const server = new Hapi.Server({
    "host": "localhost",
    "port": 3000
})

Mongoose.connect('mongodb://localhost/myDB', { useNewUrlParser: true })

const BlockModel = Mongoose.model('block', {
    height: Number,
    size: Number,
    time: Number
})

server.route({
    method: "GET",
    path: "/",
    handler: async (request, h) => {

        Mongoose.model.blocks.remove({});    //<------This is the part of the code I intend to use to delete the collection

        const { res, payload } = await Wreck.get('https://api.url');
        let myJson = JSON.parse(payload.toString()).blocks
        console.log(myJson)
        for (let i = 0; i<myJson.length; i++) {
            var block = new BlockModel({  height: myJson[i].height, size: myJson[i].size, time: myJson[i].time });
            block.save();
        }
        console.log(myJson)

        return "test"
    }
})



server.start();

关键是,它能够正常工作并将所需数据保存到我的集合中,但如果我不在每次执行时删除数据,数据库将会不断增长。因此,我打算实现类似于以下内容的功能:

db.blocks.remove({}) //where blocks is my collection

这在mongoconsole中可以正常工作。但我找不到如何在代码中实现它。


尝试使用 BlockModel.remove({}, callback) - kalimba
@kalimba 尽管现在它不会崩溃,但似乎每次执行时都没有删除任何内容,因为数据库仍在增长,我必须手动清空它。 - mouchin777
@kalimbda,mongoose 中没有删除运算符。 - Tom Slabbaert
2个回答

18
您可以使用deleteMany运算符与空过滤器一起使用。
db.collection.deleteMany({})

或使用您的模型:

await BlockModel.deleteMany({})

0

清空数据库中的所有集合

const collections = await mongoose.connection.db.collections();

for (let collection of collections) {
    await collection.deleteMany({})
}

备选方案:await Promise.all(Object.values(mongoose.connection.collections).map(async (collection) => { await collection.deleteMany({}); })); - zr0gravity7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接