Node.js 使用或模式删除文档-MongoDb和MongoMigrate
我使用mongo migrate来配置数据库内容、创建集合和文档等 现在,我试图在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
方法中删除所有创建的文档,我在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个参数,而不是两个<代码>函数删除(选择器、选项、回调)