如何在mongoose中进行原始mongodb操作?

时间:2012-05-09 15:41:22

标签: mongodb mongoose

我问这个是因为当我编写单元测试时,我想删除测试数据库并插入一些初始化数据,并在测试中检查mongodb中的数据。所以我需要mongodb的原始操作。

如何在猫鼬中做到这一点?我现在能做的就是创建连接,而不是在mongoose的官方网站上找到任何文件。

 var mongoose = require('mongoose');
 mongoose.connect('mongo://localhost/shuzu_test');

 // get the connection
 var conn = mongoose.connection;

但是如何:

  1. 删除数据库
  2. 创建一个集合
  3. 将一些数据写入集合
  4. 查询集合
  5. 删除一个集合

6 个答案:

答案 0 :(得分:42)

请参阅文档中的“驱动程序访问”部分: http://mongoosejs.com/

基本上,您可以通过YourModel.collection访问node-mongodb-native驱动程序,然后您可以insertremovedrop或您需要的任何内容。< / p>

没有文档,但通过这种方法,您可以访问此处的所有内容: https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js

修改

在您的情况下,您可能希望在测试套件中跳过使用mongoose并直接使用node-mongodb-native,或者甚至编写一个可以在测试开始之前运行的简单mongodb shell script

答案 1 :(得分:42)

您可以使用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

答案 2 :(得分:4)

使用它来运行mongoose中的原始操作。

  Model_name.collection.insertMany(array, { ordered: false },function(err, success){
            console.log(success);
        });

答案 3 :(得分:2)

遇到同样的麻烦,在测试后清理DB,实际答案因为缺席而感到困惑&#34;代码块&#34;,所以再次挖掘文档/代码,为其他人节省时间发布此内容;)

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公开的Connection类(&#39; mongoose&#39;)        实际上是驱动程序的NativeConnection类。        connection.js定义了本机的基类         版本扩展。看到:         http://mongoosejs.com/docs/api.html#drivers-node-mongodb-native-connection-js

所有&#34; RAW&#34;可以在收集/连接上执行操作, 假设你有

 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()

答案 4 :(得分:2)

const mongoose = require('mongoose');
mongoose.connect(uri, options);
var db = mongoose.connection;
db.once('open', function () {
  db.collection('collection').find().toArray(function(err, result){
        console.log(result);
  });
}

答案 5 :(得分:0)

mongoose对象具有mongo原型,可用于访问本机mongo驱动程序

mongoose.mongo