2016-04-27 20 views
0

Ich habe das Handbuch von MongoDB nachgeschlagen, kann aber nicht eine richtige Lösung finden, die folgende Suche zu tun:Komplexe Abfrage von MongoDB

Struktur Dokument:

{ 
    "_id" : ObjectId("57201082e92c07baef62452a"), 
    "user_id" : 1, 
    "profile" : [ 
     { 
      "date" : ISODate("2012-10-11T12:58:06.000Z"), 
      "content" : [ 
       { 
        "feature_id" : 1, 
        "feature_value" : true 
       } 
      ] 
     }, 
     { 
      "date" : ISODate("2013-04-12T8:23:09.000Z"), 
      "content" : [ 
       { 
        "feature_id" : 1, 
        "feature_value" : false 
       } 
      ] 
     } 
    ] 
} 

Was will ich erreichen ist die NEUESTEfeature_value eines gegebenen user_id und ein gegebenes feature_id.

Gibt es eine Möglichkeit, dies mit MongoDB zu erreichen?

Danke.

+0

Meinen Sie das letzte Element in der "Profil" Array? – styvane

Antwort

1

Unter der Annahme der neuesten (als profile.date) können Sie Folgendes verwenden, um das gewünschte Ergebnis zu erhalten. (Abfrage nicht getestet, hoffe, es funktioniert).

db.test.aggregate(
[ 
    {$match : {"user_id" : 1}}, 
    {$unwind : "$profile"}, 
    {$unwind : "$profile.content"}, 
    {$match : {"profile.content.feature_id" : 1}}, 
    {$sort : {"profile.date" : -1}}, 
    {$limit : 1}, 
    {$group:{_id : "$_id", content : {$push:"$profile.content"}}} 
]) 
+0

Es funktioniert, danke. –

0

Bitte versuchen Sie dies:

db.test.aggregate(
{$match:{"user_id" :1,"profile.content.feature_id":1}}, 
{$project:{"profile.content.feature_value":1}}, 
{$sort:{"profile.date" :-1}}, 
{$limit : 1});