Właśnie zacząłem grać z mangustą i mongo. Mam następujący kod:Znajdź Mongoose(), jak uzyskać dostęp do dokumentów wynikowych?
var ninjaSchema = mongoose.Schema({
name: String,
skill: Number
});
var Ninja = mongoose.model('Ninja',ninjaSchema);
module.exports = {
init : function(){
console.log('Connecting to database');
mongoose.connect('mongodb://localhost/mydb');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback() {
console.log('Successfully connected!');
});
},
createNinja : function(name,skill){
var n = new Ninja({name:name,skill:skill});
n.save(function(err,n){
if (err)
console.log('saving failed');
console.log('saved '+ n.name);
});
},
getNinjas : function(){
var res = null;
res = Ninja.findOne({},'name skill',function(err,docs){
if (err)
console.log('error occured in the query');
return 'ninja name: '+docs.name+' ninja skill: '+docs.skill;
});
return res;
}
Nie ma problemu z dodawaniem wpisów do bazy danych, ale mam problem z ich pobraniem. Jestem nieco zdezorientowany, jak to wszystko działa. Moje zrozumienie jest następujące:
Istnieją schematy, które są podobne do klas w oop, więc po prostu wzorzec dla rekordu w bazie danych. Model jest rekordowy, OK, może nieco więcej, ponieważ widziałem, że można dodać metodę do modelu. Cóż ... Naprawdę nie rozumiem, jak z nich korzystać. Czy możesz mi powiedzieć, czym naprawdę są?
Powrót do tematu: Podczas wydawania polecenia find wywołuje funkcję anonimową, a dokumenty powinny być wynikiem poprawnym? Jak mogę uzyskać do nich dostęp? Od teraz, jeśli loguję res otrzymuję następujący:
{ options: {},
safe: undefined,
_conditions: {},
_updateArg: {},
_fields: { name: 1, skill: 1 },
_geoComparison: undefined,
op: 'findOne',
model:
{ [Function: model]
base:
{ connections: [Object],
plugins: [],
models: [Object],
modelSchemas: [Object],
options: {} },
modelName: 'Ninja',
model: [Function: model],
db:
{ base: [Object],
collections: [Object],
models: {},
replica: false,
hosts: null,
host: 'localhost',
port: 27017,
user: undefined,
pass: undefined,
name: 'mydb',
options: [Object],
_readyState: 1,
_closeCalled: false,
_hasOpened: true,
_listening: true,
_events: [Object],
db: [Object] },
schema:
{ paths: [Object],
subpaths: {},
virtuals: [Object],
nested: {},
inherits: {},
callQueue: [],
_indexes: [],
methods: {},
statics: {},
tree: [Object],
_requiredpaths: [],
options: [Object],
_events: {} },
options: undefined,
collection:
{ collection: [Object],
opts: [Object],
name: 'ninjas',
conn: [Object],
queue: [],
buffer: false } } }
Także jeśli mogę użyć Ninja.find(...,function(err,docs){ ... })
jak mogę iść koryta docs? Lub jak mogę odzyskać moje rekordy?
Ach ty mnie bić się to. Przygotowałem dla ciebie fajną odpowiedź, ale dostałeś to. Będziesz chciał przekazać wywołanie zwrotne, do którego wysyłasz wyniki. – numbers1311407