J'ai une grande collection de 300 question
objets dans une base de données test
. Je peux facilement interagir avec cette collection grâce au shell interactif de MongoDB; cependant, lorsque j'essaie d'obtenir la collection via Mongoose dans une application express.js, j'obtiens un tableau vide.
Ma question est la suivante: comment puis-je accéder à cet ensemble de données déjà existant au lieu de le recréer en express? Voici un code:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
mongoose.model('question', new Schema({ url: String, text: String, id: Number }));
var questions = mongoose.model('question');
questions.find({}, function(err, data) { console.log(err, data, data.length); });
Cela produit:
null [] 0
Model.collection.insert();..
mongoose.connect("mongodb://localhost/fromlab"); var Schema = mongoose.Schema; var User = mongoose.model("User", new Schema({}), "users"); User.find({}, function(err, doc){ console.log((doc)) })
Voici une abstraction de la réponse de Will Nathan si quelqu'un veut juste une fonction complémentaire simple de copier-coller:
faites simplement
find(collection_name, query, callback);
pour obtenir le résultat.par exemple, si j'ai un document {a: 1} dans une collection 'foo' et que je veux lister ses propriétés, je fais ceci:
la source
Vous pouvez faire quelque chose comme ça, puis vous accéderez aux fonctions natives de mongodb à l'intérieur de mongoose:
la source
J'ai eu le même problème et j'ai pu exécuter une requête sans schéma en utilisant une connexion Mongoose existante avec le code ci-dessous. J'ai ajouté une simple contrainte 'a = b' pour montrer où vous ajouteriez une telle contrainte:
la source
question
le code ci-dessus parfs.files
et vous êtes prêt à partir.Êtes-vous sûr de vous être connecté à la base de données? (Je demande parce que je ne vois pas de port spécifié)
essayer:
En outre, vous pouvez faire un "show collections" dans mongo shell pour voir les collections dans votre db - peut-être essayer d'ajouter un enregistrement via mangouste et voir où il se termine?
De l'apparence de votre chaîne de connexion, vous devriez voir l'enregistrement dans la base de données "test".
J'espère que ça aide!
la source
questions
collection lorsque les données auxquelles j'essaie d'accéder se trouvent dans unequestion
collection. Mongoose met-il automatiquement au pluriel les noms de collection / modèle?Une autre chose qui n'était pas évidente, du moins pour moi, était que lorsque vous utilisez le troisième paramètre de Mongoose pour éviter de remplacer la collection réelle par une nouvelle avec le même nom, le
new Schema(...)
n'est en fait qu'un espace réservé et n'interfère pas avec l'exisitng schéma doncfonctionne correctement et renvoie tous les champs, même si le schéma réel (distant) ne contient aucun de ces champs. Mongoose le voudra toujours comme
new Schema(...)
, et une variable ne le piratera presque certainement pas.la source