我问这个是因为当我编写单元测试时,我想删除测试数据库并插入一些初始化数据,并在测试中检查mongodb中的数据。所以我需要mongodb的原始操作。
如何在猫鼬中做到这一点?我现在能做的就是创建连接,而不是在mongoose的官方网站上找到任何文件。
var mongoose = require('mongoose');
mongoose.connect('mongo://localhost/shuzu_test');
// get the connection
var conn = mongoose.connection;
但是如何:
请参阅文档中的“驱动程序访问”部分:http://mongoosejs.com/
基本上你可以通过node-mongodb-native访问YourModel.collection
驱动程序然后你可以insert
或remove
或drop
或任何你需要的。
没有文档,但通过这种方法,您可以访问这里的所有内容:https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js
编辑:
在您的情况下,您可能希望跳过在测试套件中使用mongoose并直接使用node-mongodb-native,或者甚至编写一个可以在测试开始之前运行的简单mongodb shell script。
您可以使用mongoose.connection.db
运行本机mongodb命令。这将访问本机MongoDB驱动程序,您无需创建模型。
mongoose.connection.db.collection('userCollection').insert({
username: 'user1',
firstName: 'Steve',
lastName: 'LastName',
});
mongoose.connection.db.collection('userCollection').update(
{someFilterProperty: true},
{$set: {
siteId: new mongoose.mongo.ObjectId('56cb91bdc5946f14678934ba'),
hasNewSiteId: true}},
{multi: true});
});
您可以使用数据库连接db reference mongoose.connection.db
发送特定于该数据库的每个命令。
这是mongoose API doc:http://mongoosejs.com/docs/api.html#connection_Connection-db
用它来运行mongoose中的原始操作。
Model_name.collection.insertMany(array, { ordered: false },function(err, success){
console.log(success);
});
遇到同样的麻烦,在测试后清理数据库,实际答案只是因为缺少“代码块”而混淆,所以再次挖掘文档/代码,为其他人节省时间的目的发布这个;)
Mongoose系列扩展了Mongodb系列
/ * * section collection.js * http://mongoosejs.com/docs/api.html#collection-js * /
interface CollectionBase扩展mongodb.Collection {
文档:http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html
连接也一样:
require('mongoose')公开的Connection类实际上是驱动程序的NativeConnection类。 connection.js定义了本机版本扩展的基类。见:http://mongoosejs.com/docs/api.html#drivers-node-mongodb-native-connection-js
所以所有“RAW”操作都可以在收集/连接上执行,假设你有
var connection = mongoose.connection;
然后:
1.丢弃数据库:
connection.dropDatabase()
2.创建一个集合
connection.collection('newcollection') // creates if not exists
3.将一些数据写入集合
connection.collection('mybenotnewcollection').bulkWrite([
{ insertOne: { whatewer: { you: 'need' } } },
]);
4.查询集合
这显然不是一个问题:findAll,find,aggregate,all allowed(参见Docs)
5.收集一个集合
connection.collection('notsonewcollection').drop()