Подтвердить что ты не робот

Как сделать сырые операции mongodb в мангусте?

Я прошу об этом, потому что, когда я пишу модульные тесты, я хочу сбросить тестовую базу данных и вставить некоторые данные инициализации, а также проверить данные в mongodb при тестировании. Поэтому мне нужны сырые операции для mongodb.

Как это сделать в мангусте? Теперь я могу просто создать соединение, а не найти какой-либо документ на официальном сайте mongoose.

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

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

Но как:

  • удалить базу данных
  • создать коллекцию
  • записать некоторые данные в коллекцию
  • запрос коллекции
  • удалить коллекцию
4b9b3361

Ответ 1

См. раздел "Доступ к драйверам" в документах: http://mongoosejs.com/

В принципе, вы можете получить доступ к node-mongodb-native, выполнив YourModel.collection, а затем вы можете insert или remove или drop или что угодно вам нужно.

Там нет документа, но с таким подходом вы получите доступ ко всему здесь: https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js

Edit:

В вашем случае вы можете пропустить использование мангуста в своем тестовом наборе и напрямую использовать node-mongodb-native или даже написать простой mongodb shell script, который может быть запущен до запуска ваших тестов.

Ответ 2

Вы можете запускать команды mongodb, используя собственный драйвер NodeJS, используя mongoose.connection.db. Это обращается к драйверу NodeJS MongoDB, и вам не нужно создавать модель мангуста.

Вставка

mongoose.connection.db.collection('userCollection').insert({
  username: 'captain1',
  firstName: 'Steve',
  lastName: 'Rogers', 
});

Обновление

mongoose.connection.db.collection('userCollection').update(
  {someFilterProperty: true},
  {$set: {
     siteId: new mongoose.mongo.ObjectId('56cb91bdc5946f14678934ba'),
     hasNewSiteId: true}},
  {multi: true});
});

Вы можете отправить каждую команду, относящуюся к этой базе данных, используя ссылку на базу данных соединения с базой данных mongoose.connection.db.

Это документ API Mongoose: http://mongoosejs.com/docs/api.html#connection_Connection-db

Важно: обратите внимание, что некоторые параметры в драйвере NodeJS отличаются от параметров в командах оболочки MongoDB. Например, findOneAndUpdate() использует returnOriginal вместо returnNewDocument. Подробнее об этом см. здесь и здесь.

Ответ 3

используйте это для запуска сырых операций в мангусте.

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

Ответ 4

У вас возникли такие же проблемы, как очистка БД после тестов, а фактический ответ только путают из-за отсутствия "блоков кода", поэтому еще раз dig docs/code, для других - сэкономить время, отправляя это;)

Коллекция Mongoose расширяет коллекцию Mongodb

/*    * раздел collection.js    * http://mongoosejs.com/docs/api.html#collection-js   */

Интерфейс CollectionBase расширяет mongodb.Collection {

Документация: http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html

То же самое касается соединения:

Класс подключения, открытый с помощью require ('mongoose')      на самом деле является классом 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.query коллекция

что, очевидно, не вопрос: findAll, find, aggregate, all allowed (см. Docs)

5.drop коллекция

connection.collection('notsonewcollection').drop()