web-dev-qa-db-fra.com

Comment faire des opérations de mongodb brut dans la mangouste?

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:

  1. supprimer la base de données
  2. créer une collection
  3. écrire des données dans une collection
  4. interroger une collection
  5. déposer une collection
59
Freewind

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.

43
Jamund Ferguson

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 .

Un insert

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

Une mise à jour

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

48
steampowered

utilisez-le pour exécuter des opérations brutes dans mangouste.

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

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