2017-02-18 6 views
0

Ich habe Mungo mit meiner Anwendung verwendet und versucht, die Dokumente, die als Land Typ hat und das Metadatenfeld davon abzurufen.Filter nach Feld und wählen Sie ein anderes Feld mongodb

mein Dokument sieht wie folgt aus,

enter image description here

i in Code,

dbHelper.query(mongoose.model('_entity'), { 
       'type': 'country' 
      }, function (error, data) {     
       callback(data); 
      }); 

dbHelper:

query: function (model, conditon, options) { 
      return new Promise(function (resolve, reject) { 
       options = options || {}; 
       model.find(conditon, {}, options, function (error, data) { 
        if (error) 
         console.log("error is"+err); 
         reject(error); 
        console.log("data is "+data); 
        resolve(data); 
       }) 
      }) 
     } 

, wie dies geändert werden, um sollte Wählen Sie die metadata Feld?

Antwort

1

Sie können Ihre find Abfrage ein wenig nur die metada oder je nachdem, was fields Sie auswählen möchten ändern.

model.find(conditon, {"metadata" : 1}, options, function (error, data) { 
    if (error) 
     console.log("error is"+err); 
     reject(error); 
    console.log("data is "+data); 
    resolve(data); 
}); 

Wenn Sie keine Metadaten in der bestehenden find Abfrage hinzufügen können, können Sie alternative Methode versuchen.

fügen Sie der Abfragefunktion ein weiteres Argument projection hinzu.

query: function (model, conditon, projection, options) { 
    return new Promise(function (resolve, reject) { 
     options = options || {}; 
     projection = projection || {}; 
     model.find(conditon, projection, options, function (error, data) { 
      if (error) 
       console.log("error is"+err); 
       reject(error); 
      console.log("data is "+data); 
      resolve(data); 
     }) 
    }) 
} 

Und es wie folgt verwenden:

dbHelper.query(mongoose.model('_entity'), { 
    'type': 'country' 
},{ 
    'metadata' : 1//add other required fields if needed 
}, function (error, data) {     
    callback(data); 
}); 

Ich denke, dies in Ihrem Fall funktionieren wird.

1

Sie benötigen select:

mongoose 
    .model('_entity') 
    .find() 
    .where('type').equals('country') 
    .select('metadata') 
    .exec(function(error, data) { 
     callback(data); 
    }); 

Update: zum Beispiel projection = ["metadata", "name"]

query: function (model, conditon, projection, options) { 
      return new Promise(function (resolve, reject) { 
       options = options || {}; 
       projection = projection || []; 
       model.find(conditon, projection.join(" "), options, function (error, data) { 
        if (error) 
         console.log("error is"+err); 
         reject(error); 
        console.log("data is "+data); 
        resolve(data); 
       }) 
      }) 
     } 
+0

ich weiß, wir müssen auswählen, aber wie ändere ich den obigen Code? – Sajeetharan

+0

@Sajeetharan Was ist mit Projektion? –

+0

Wie soll ich diese Abfrage jetzt aufrufen?, Bedingungen sind leer – Sajeetharan

Verwandte Themen