2017-11-25 2 views
0

, dass mein MongoDB Schema ist:Vergleich Objekt in Mongoose mit Datetime

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var DogSchema = new Schema({ 
    id_user: { 
     type: String, 
     required:true 
    }, 
    name: { 
     type: String, 
     required:true 
    }, 
    imei: { 
     type: String, 
     required:true, 
     unique:true 
    }, 
    position: [{ 
     lat: {type: Number, required:true}, 
     lng: {type: Number, required:true}, 
     date: {type: Date, required:true} 
    }], 
    teams: [{ 
     code: {type:String,required:true} 
    }] 
}); 

module.exports = mongoose.model('Dog', DogSchema); 

Ich mag nur Positionen in einem bestimmten Datumsbereich zu finden. Ich habe versucht, die Abfrage zu verwenden:

db.dogs.find({"position.date" : { $gte : new Date("2017-11-25T00:00:00.000Z") , $lt : new Date("2017-11-26T00:00:00.000Z")}}) 

Aber, wenn ich eine Position zu finden, die der Abfrage entsprechen, die DB alle das Dokument zurück. Wie kann ich nur die Positionen mit diesem Zeitraum erhalten?

Antwort

0

Um die Bedingungen für die Abfrage in Ihrem Subdokumente geben Sie .populate() mit match

db.dogs.find({}). 
    populate({ 
    path: "position", 
    match: { date: { $gte : new Date("2017-11-25T00:00:00.000Z") , $lt : new Date("2017-11-26T00:00:00.000Z") }}, 
    // Explicitly exclude `_id` if needed 
    select: '-_id date', 
    }). 
    exec() 

siehe Mongoose Query Population

verwenden müssen