Node.js 使用或模式删除文档-MongoDb和MongoMigrate

Node.js 使用或模式删除文档-MongoDb和MongoMigrate,node.js,mongodb,migration,database-migration,Node.js,Mongodb,Migration,Database Migration,我使用mongo migrate来配置数据库内容、创建集合和文档等 现在,我试图在方法中删除所有创建的文档,我在mongodb、mongoose、MongoMigrate有点陌生。我按照那里的指示:(或部分) 源代码: var mongodb = require('mongodb'); exports.up = function(db, next){ var documentName = 'category'; var collection = mongodb.Collect

我使用mongo migrate来配置数据库内容、创建集合和文档等

现在,我试图在
方法中删除所有创建的文档,我在mongodb、mongoose、MongoMigrate有点陌生。我按照那里的指示:(或部分)

源代码:

var mongodb = require('mongodb');

exports.up = function(db, next){

    var documentName = 'category';
    var collection = mongodb.Collection(db, documentName);
    collection.insert({
        code: 'a',
        name: 'languageStatus'
    }, function(error, data){
        console.log(error ? error : documentName + ': ' + JSON.stringify(data));
    });
    collection.insert({
        code: 'b',
        name: 'accessName'
    }, function(error, data){
        console.log(error ? error : documentName + ': ' + JSON.stringify(data));
    });
    collection.insert({
        code: 'c',
        name: 'roleName'
    }, function(error, data){
        console.log(error ? error : documentName + ': ' + JSON.stringify(data));
    });
    collection.insert({
        code: 'd',
        name: 'translationStatus'
    }, function(error, data){
        console.log(error ? error : documentName + ': ' + JSON.stringify(data));
    });

    next();
};

exports.down = function(db, next){
    var documentName = 'category';
    var document = mongodb.Collection(db, documentName);

    var query = {
        $or: [
            {name: 'languageStatus'},
            {name: 'accessName'},
            {name: 'roleName'},
            {name: 'translationStatus'}
        ]
    };
    document.findAndModify(query, [], {}, { remove: true }, function(error, data){
        console.log(error ? error : 'Deleted: ' + documentName + ': ' + JSON.stringify(data));
    });

    next();
};
在控制台中,我得到:

向上

category: [{"code":"a","name":"languageStatus","_id":"52f535d71a60eedc7c1685d4"}]
category: [{"code":"b","name":"accessName","_id":"52f535d71a60eedc7c1685d5"}]
category: [{"code":"c","name":"roleName","_id":"52f535d71a60eedc7c1685d6"}]
category: [{"code":"d","name":"translationStatus","_id":"52f535d71a60eedc7c1685d7"}]
Deleted: category: {"code":"a","name":"languageStatus","_id":"52f535d71a60eedc7c1685d4"}
向下

category: [{"code":"a","name":"languageStatus","_id":"52f535d71a60eedc7c1685d4"}]
category: [{"code":"b","name":"accessName","_id":"52f535d71a60eedc7c1685d5"}]
category: [{"code":"c","name":"roleName","_id":"52f535d71a60eedc7c1685d6"}]
category: [{"code":"d","name":"translationStatus","_id":"52f535d71a60eedc7c1685d7"}]
Deleted: category: {"code":"a","name":"languageStatus","_id":"52f535d71a60eedc7c1685d4"}
我的
向下查询有什么问题

附言:我只是想到了发现和修改。。。嗯,我想它只返回第一个结果,这是有道理的。但是如何删除这些文档呢?我刚找到
remove
方法,但没有回调

编辑: 当然,这是因为
查找和修改
。因此,我更改了源代码,但我遇到了另一个我不理解的问题:

exports.down = function(db, next){
    var documentName = 'category';
    var document = mongodb.Collection(db, documentName);

    var query = {
        $or: [
            {name: 'languageStatus'},
            {name: 'accessName'},
            {name: 'roleName'},
            {name: 'translationStatus'}
        ]
    };
    document.find(query, function(error, data){
        data.each(function(error, data){
            console.log(data)
            document.remove(data, function(error, number){
                console.log(error ? error : documentName + ': (' + number + ') ' + JSON.stringify(data));
            })
        });
    });

    next();
};
控制台:

因此,在第一个控制台日志中,有4次迭代,没有问题。但是在remove()方法的回调中,我只得到一个?!我不明白,我也应该收到4条信息。 我不理解空值,它来自第一个console.log

奇怪的是,我收到了一条关于remove()回调的消息,但所有文档都被正确地删除在数据库中。

这不是您调用的方式

该链接指向MongoDB通用文档。比其他地方好一点


您正在使用
data
作为传入的参数,但实际需要的是
query
。因此,参数不是要删除哪些文档,而是查找它们的查询。

基本上,回调必须是
remove
方法的第二个参数。但是我只得到被删除的行数。我尝试按照文档进行操作,但得到以下结果:
错误:如果没有提供的回调,则无法使用writeConcern
。另外,我还希望有一条消息来详细说明每个删除的数据。我找到了这个链接,在
集合中看到了三个参数。remove
方法。不只是两个像在前面的链接。我真的不明白!我刚刚做了一个
console.log(collection.remove.toString())
来看看函数是什么,有3个参数,而不是两个<代码>函数删除(选择器、选项、回调)