Je pose cette question parce que lorsque j'écris des tests unitaires, je veux supprimer la base de données de test et insérer des données d'initialisation, et également vérifier les données dans mongodb dans testing. J'ai donc besoin d'opérations brutes pour mongodb.
Comment faire cela chez la mangouste? Ce que je peux faire maintenant, c'est simplement créer la connexion, et ne trouver aucun document sur le site officiel de mangouste.
var mongoose = require('mongoose');
mongoose.connect('mongo://localhost/shuzu_test');
// get the connection
var conn = mongoose.connection;
Mais comment:
Voir la section sur "l'accès au pilote" dans la documentation: http://mongoosejs.com/
Fondamentalement, vous pouvez accéder au pilote node-mongodb-native en faisant YourModel.collection
puis vous pouvez insert
ou remove
ou drop
ou tout ce dont vous avez besoin.
Il n'y a pas de doc, mais avec cette approche, vous aurez accès à tout ici: https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js
Modifier:
Dans votre cas, vous pouvez ignorer l'utilisation de mangouste dans votre suite de tests et utiliser directement node-mongodb-native , ou même écrire un simple script Shell mongodb qui peut être exécuté avant le début de vos tests.
Vous pouvez exécuter des commandes natives mongodb en utilisant mongoose.connection.db
. Cela accède au pilote natif MongoDB et vous n'avez pas besoin de créer un modèle .
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});
});
Vous pouvez envoyer chaque commande spécifique à cette base de données à l'aide de la référence de base de données de connexion à la base de données mongoose.connection.db
.
Il s'agit du document API mongoose: http://mongoosejs.com/docs/api.html#connection_Connection-db
utilisez-le pour exécuter des opérations brutes dans mangouste.
Model_name.collection.insertMany(array, { ordered: false },function(err, success){
console.log(success);
});
J'ai rencontré le même problème, pour nettoyer les bases de données après les tests, et la réponse réelle n'a été confondue qu'en raison de l'absence de "blocs de code", alors creusez à nouveau les documents/code, pour gagner du temps, en postant ceci;)
La collection Mongoose étend la collection Mongodb
/ * * section collection.js * http://mongoosejs.com/docs/api.html#collection-js * /
l'interface CollectionBase étend mongodb.Collection {
Documentation: http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html
Il en va de même pour la connexion:
La classe Connection exposée par require ('mongoose') est en fait la classe NativeConnection du pilote. connection.js définit une classe de base que les versions natives étendent. Voir: http://mongoosejs.com/docs/api.html#drivers-node-mongodb-native-connection-js
Ainsi, toutes les opérations "RAW" peuvent être effectuées sur la collecte/connexion, en supposant que vous avez
var connection = mongoose.connection;
puis:
1.Drop la base de données:
connection.dropDatabase()
2.créer une collection
connection.collection('newcollection') // creates if not exists
3.écrire des données dans une collection
connection.collection('mybenotnewcollection').bulkWrite([
{ insertOne: { whatewer: { you: 'need' } } },
]);
4. interroger une collection
ce n'est évidemment pas une question: findAll, find ,gregate, all allowed (voir le Docs )
5. déposer une collection
connection.collection('notsonewcollection').drop()