2017-02-18 1 views
1

J'ai une collection avec l'emplacement et le nom en tant que champs.Pourquoi mongo ne retourne pas tous les champs?

i créé index pour le nom avec la mangouste comme ci-dessous,

eventSchema.index({name: 'text'}); 

Quand j'exécuter sur robomongo, il retourne tous les 12 champs,

db.getCollection('_event').find({"location.country":"United States"}) 

mais quand je lance ceci sur robomongo, il renvoie les valeurs uniquement avec deux champs, l'ID et l'emplacement,

db.getCollection('_event').find({$text: {$search: "2017 Honda"}},{"location.country":"United States"}) 

Répondre

3

C'est parce que vous avez égaré votre autre expression de requête, vous il spécifié comme une projection où vous obtenez la projection avec deux champs:

db.getCollection('_event').find(
    {$text: {$search: "2017 Honda"}}, // <-- query part 
    {"location.country":"United States"} // <-- projection part 
) 

Vous devez le déplacer dans l'objet de requête comme:

db.getCollection("_event").find(
    { 
     "$text": { "$search": "2017 Honda" }, 
     "location.country": "United States" 
    } 
) 

qui est une expression $and implicite, et peut également être spécifié explicitement comme

db.getCollection("_event").find(
    { 
     "$and": [ 
      { "$text": { "$search": "2017 Honda" } }, 
      { "location.country": "United States" } 
     ] 
    }   
) 
-1
db.getCollection('_event').find({ 
    $text: {$search: "2017 Honda"}, 
    "location.country":"United States" 
}, 
{ 
    "location":1, 
    "_id":0 // -- here we specify required fields. 1 is showing, 0 is not showing 
});