Pytanie mongodb odpowiednik pola SELECT AS `anothername`


jaki jest mongodbowy odpowiednik zapytania MySQL

SELECT username AS  `consname` FROM  `consumer`

11
2017-11-13 14:01


pochodzenie


Framework agregacji $ proejct to jedyny sposób - Sammaye
Najlepiej po prostu naprawić dane za pomocą dowolnego klienta / sterownika, którego używasz. Niektórzy mogą to zrobić jako funkcję sterownika. - WiredPrairie
db.consumer.find().toArray().map(function (doc) { doc.consname=doc.username; delete doc.username; return doc; }); - hgoebl
@hgoebl: find () zwraca kolekcję i nie ma metody toArray (przynajmniej w Meteors mongodb wersja 2). Ale możesz zrobić forEach w kolekcji. - westor
@westor możliwe, że jestem w błędzie lub toArray() jest tylko w powłoce Mongo lub w starszej wersji natywnego sterownika. Dzięki za podpowiedź! - hgoebl


Odpowiedzi:


Jak wspomniał sammaye, musisz użyć Projekt $ w struktura agregacji aby zmienić nazwy pól.

W twoim przypadku byłaby to:

db.consumer.aggregate([
    { "$project": {
        "_id": 0,
        "consname": "$username"
    }}
])

Fajnie jest, że agregator wersji 2.6.x zwraca kursor, co oznacza, że ​​zachowuje się jak find.

Możesz także rzucić okiem $ zmień nazwę operator, aby na stałe zmienić schemat.


9
2018-05-21 21:51





Odpowiedź Salvadora Dali jest w porządku, ale nie działa w wersji meteorologicznej przed 3.0. Obecnie próbuję meteor, a ich wbudowanie w mongodb jest w wersji 2. Sposób, w jaki to rozwiązałem, jest następujący:

var result = []:
db.consumer.forEach( function(doc) {
   result.push({
     consname:doc.username
   });
});

0
2017-10-09 07:03



Ale OP nie wspomina Meteor - Wahyu Kristianto