Как сделать сырые операции mongodb в мангусте?
Я прошу об этом, потому что, когда я пишу модульные тесты, я хочу сбросить тестовую базу данных и вставить некоторые данные инициализации, а также проверить данные в mongodb при тестировании. Поэтому мне нужны сырые операции для mongodb.
Как это сделать в мангусте? Теперь я могу просто создать соединение, а не найти какой-либо документ на официальном сайте mongoose.
var mongoose = require('mongoose');
mongoose.connect('mongo://localhost/shuzu_test');
// get the connection
var conn = mongoose.connection;
Но как:
- удалить базу данных
- создать коллекцию
- записать некоторые данные в коллекцию
- запрос коллекции
- удалить коллекцию
Ответы
Ответ 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()