2014-07-13 10 views
6
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/test', {user: 'mongod'}); 
mongoose.connection.once('open', function() { 

tworzę model z jednego pola i surowe: falseniezdefiniowane pola modelu z `surowe: FALSE

var Foo = mongoose.model('Foo', mongoose.Schema({ 
    foo: String 
    }, {strict: false})); 

następnie zapisać model z dwoma polami

Foo.create({foo: "FOO", bar: "BAR"}, function() { 

Potem ją przeczytać i wydrukuj go z polami:

Foo.findOne(function (err, f) { 
     console.log(f, f.foo, f.bar); 
    }); 

    }); 
}); 

Dane wyjściowe to { foo: 'FOO', bar: 'BAR', _id: 53c249e876be58931f760e70, __v: 0 }, 'FOO', undefined. Nowy element jest poprawnie zapisany, a console.log może zobaczyć 'BAR', ale nie mogę. Jak tylko dodaję pasek do schematu, też to widzę. Czy to zamierzone zachowanie? Jak mogę uzyskać bar bez uwzględniania go w schemacie?

+1

wiem, mogę określić moje schematu jako '{dowolnym: {}}', a następnie utworzyć '{dowolnym: {foo:" FOO ", bar:" BAR "}}' i wydrukuj 'f.any, f.any.foo, f.any.bar'. Wolałbym jednak nie mieć dodatkowego pola. –

+0

Jeśli używasz {any: {}}, jedynym problemem jest zapisanie wszystkich danych przechowywanych wcześniej w obiekcie, jeśli nie chcesz stracić go podczas aktualizacji obiektu. – isanjosgon

Odpowiedz

5

Aby uzyskać dostęp do pola nie zdefiniowano w schemacie z get:

Foo.findOne(function (err, doc) { 
    console.log(doc, doc.foo, doc.get('bar')); 
}); 

wyjściowa:

{ _id: 53c28dad3b2464566cf5672d, foo: 'FOO', bar: 'BAR' } 'FOO' 'BAR' 

Pole bar pokazuje też po zalogowaniu doc jako metoda dokumentu Mongoose inspect wyprowadza wszystkie pola.

0

można uzyskać dostęp za pomocą _doc

przykład: doc._doc.fieldname

Powiązane problemy