2013-02-05 12 views
5

Esiste un modo per restituire solo il valore di una proprietà in una proiezione mongodb? Ad esempio, ho un documento che ha una proprietà il cui valore è una matrice. Voglio che l'oggetto restituito da una query sia solo l'array, non property: [ .. ]. Esempio:Restituisce solo il valore dell'array nella proiezione mongo

documento:

db.test.insert({ name: "Andrew", 
    attributes: [ { title: "Happy"}, 
       { title: "Sad" } 
       ] 
}); 

Query:

db.test.find({name: "Andrew"},{attributes:1, "_id":0}); 

che restituisce:

{ "attributes" : [ { "title" : "Happy" }, { "title" : "Sad" } ] } 

lo voglio per tornare sulla matrice:

[ { title: "Happy"}, 
    { title: "Sad" } 
] 

C'è un modo per farlo? Grazie

+1

La proiezione di MongoDBs non funziona come questo lato server, sarebbe necessario filtrare questo lato client – Sammaye

+0

Grazie, quella era la mia paura .. –

risposta

3

JSON non consente al toplevel di essere un array, quindi una query normale non lo consente. È tuttavia possibile farlo con il quadro di aggregazione:

> db.test.remove(); 
> db.test.insert({ name: "Andrew", attributes: [ { title: "Happy"}, { title: "Sad" } ] }); 
> foo = db.test.aggregate({ $match: { name: "Andrew" } }, { $unwind: "$attributes" }, { $project: { _id: 0, title: "$attributes.title" } }); 
{ 
    "result" : [ 
     { 
      "title" : "Happy" 
     }, 
     { 
      "title" : "Sad" 
     } 
    ], 
    "ok" : 1 
} 
> foo.result 
[ { "title" : "Happy" }, { "title" : "Sad" } ] 

Ciò tuttavia, non crea un oggetto cursore che trovano lo fa.

+0

Grazie, ho avuto il sospetto che l'array non fosse nemmeno JSON valido . Grazie per la descrizione! –

+0

Un array semplice è JSON valido: i vari tipi di dati in JSON possono essere tutti indipendenti e costituiscono un documento JSON valido. – dalgard

Problemi correlati