Próbuję wybrać tylko określone pole za pomocą
exports.someValue = function(req, res, next) {
//query with mongoose
var query = dbSchemas.SomeValue.find({}).select('name');
query.exec(function (err, someValue) {
if (err) return next(err);
res.send(someValue);
});
};
Ale w mojej odpowiedzi json otrzymuję również _id, mój schemat dokumentu ma tylko dwa pola, _id i nazwę
[{"_id":70672,"name":"SOME VALUE 1"},{"_id":71327,"name":"SOME VALUE 2"}]
Czemu???
javascript
node.js
mongodb
mongoose
TlonXP
źródło
źródło
.select
po prostu jest to filtr do wyboru pola po tym, jak to wszystko zdobędziesz,.find({}, 'name -_id')
.find({}, 'name -_id')
nie działa?Teraz jest na to krótszy sposób:
W przypadku, gdy chcesz większość
Schema fields
i chcą pominąć tylko kilka, można poprzedzić polaname
z-
. Ex"-name"
w drugim argumencie będzie nie zawierająname
pola w dokumencie natomiast przykład podano tutaj będą miały jedynie naname
polu w zwracanych dokumentów.źródło
blogItemModel.find({}, 'title intro_image intro_text publish_date', function(err, blog_items){..
Jest lepszy sposób na obsługę tego przy użyciu kodu natywnego MongoDB w Mongoose.
http://docs.mongodb.org/manual/reference/method/db.collection.find/
Uwaga:
Lista obiektów wymienionych tutaj nie zostanie zwrócona / wydrukowana.
źródło
Dane DB
Pytanie
Wynik:
Działający przykładowy plac zabaw
połączyć
źródło
Wykluczać
Poniższy kod pobierze wszystkie pola inne niż hasło w każdym dokumencie:
Wynik
Zawierać
Poniższy kod pobierze tylko pole e-mail w każdym dokumencie:
Wynik
źródło
Dokładnym sposobem na to jest użycie
.project()
metody kursora z newmongodb
inodejs
driver.źródło
.project()
działa tylko z kruszywem. Jeśli chcesz go użyć z find, użyj drugiego argumentu wfind({},{ name: 1, _id: 0 })
metodzie.Na przykład,
0 oznacza ignorować
1 oznacza pokaż
źródło