2016-11-20 5 views
0

ich so ein Mungo-Schema:, wie Daten innerhalb eines Arrays der Sammlung abfragen Mungo mit

var LogsSchema = new Schema({ 
    date: Date, 
    longitude: String, 
    latitude: String, 
    speed: Number 
}); 

var DeviceSchema = new Schema({ 

name: String, 
model: String, 
phone: { 
    type: Number, 
    required: true, 
    unique: true 
}, 
push: Number, 
logs: [LogsSchema], 
}) 

i in meiner Datenbank von Protokollen riesige Auswahl haben, wie kann ich sortieren Protokolle Array-Daten begrenzen und überspringen ?? Derzeit nehme ich nur die letzten 10 Elemente des Arrays, aber ich möchte die Anwendung Bedingung auswählen. Die Verwendung von $ elemMatch löst mein Problem nicht, das es von der ganzen Sammlung zeigt, aber ich brauche von einzelnen Dokumenten. ist der Wunsch, Protokolle aus dem Datumsbereich zu finden. Alle Vorschläge werden sehr geschätzt.

+0

können Sie ein Beispiel Abfrage zeigen, dass Sie versucht haben und was Ihre erwartete Ausgabe mit einigen Beispieldokumente ist? – chridam

Antwort

1

Verwendung Aggregation Rahmen. $ Ihre Log-Array entspannen und anwenden, was Bedingung, die Sie $ wollen sort $ entsprechen, skip.or Sie können $ Filter in $ Projektphase überprüfen, geben Sie bitte Ihre erwartete Ausgabe veröffentlichen werde ich meine Hand

versuchen
db.collection.aggregate([{"$unwind" : "$logs"}, 
{$match : {"$and" : [{"logs.date" :{$gte : fromDate} }, 
{"logs.date" :{"$lte" : toDate}}]}}, 
{"$group" : "_id" : "_id", 
"logs" : {"$push" : "$logs"}, 
"names" :{"$first" : "$name"} 
}]) 

Oder können Sie $ Filter verwenden, wenn mongodb mit 3,2

{ 
    $filter: { 
    input: logs, 
    as: "num", 
    cond: { $and: [ 
     { $gte: [ "$$num.date", fromDate ] }, 
     { $lte: [ "$$num.date", toDate ] } 
     ] } 
    } 
} 
+0

Ich möchte Protokolle von $ gte abrufen: "a_date", $ lte: "a_date" – jsgeek

+0

Überprüfen Sie meine aktualisierte Antwort –

Verwandte Themen