2012-09-16 2 views
0

J'ai utilisé la découverte est correct:Comment interroger l'emplacement avec une plage de dates à l'aide de la commande geoNear avec une requête dans mongoDB?

{ 
    $and:[ 
     {"online":1}, 
     {"uptime":{$gte: new Date(2012,8,16,2,51)}} 
    ] 
} 

la commande suivante est également correct:

{ 
    geoNear : "Driver", 
    near : [120.105148,30.447977 ], 
    num : 100, 
    spherical : true, 
    maxDistance :500/6378, 
    query:{"online":1} 
} 

mais j'utilisé la commande geoNear avec l'index géospatiale, je ne peux pas anythings:

{ 
    geoNear : "Driver", 
    near : [120.105148,30.447977 ], 
    num : 100, 
    spherical : true, 
    maxDistance :500/6378 , 
    query:{ 
     $and:[ 
      {"online":1}, 
      {"uptime":{$gte: new Date(2012,8,16,2,51)}} 
     ] 
    } 
} 

l'exigence est: Je veux les clients en ligne, ils mettent à jour la position en 10 minutes, comment peut faire? J'ai créé l'index géospatial nommé "pos", inclued les colonnes: uptime et en ligne

merci.

Répondre

0

Vous n'avez pas besoin $ et dans la requête. Si vous ajoutez deux champs, seuls les documents correspondant aux deux conditions sont renvoyés.

Essayez ceci:

db.runCommand(
    { 
     geoNear : "Driver", 
     near : [120.105148,30.447977 ], 
     num : 100, 
     spherical : true, 
     maxDistance :500/6378 , 
     query: { "online": 1, 
       "uptime": {$gte: new Date(2012,8,16,2,51)} 

     } 
    } 
) 

$ et est uniquement nécessaire si vous voulez avoir deux conditions sur le même domaine, ou si vous souhaitez formuler des requêtes logiques plus complexes impliquant $ et $ et ou. Voir le $and documentation pour plus d'informations.

+0

thks au premier; Je dois utiliser le $ ou, et $ ou n'est pas le travail; et maintenant j'ajoute un timestap (long ms) à la place de la Date, la commande peut fonctionner. – Shareach

0

en premier lieu; J'ai utilisé le $ ou à la place du $ et, il ne pouvait pas non plus fonctionner, j'ai besoin d'utiliser le $ ou; maintenant, j'ajouter une colonne milliseconde (type long) que convertir de la colonne Date et j'ai changé la colonne Date comme ce qui suit, il a travaillé:

{ 
geoNear : "Driver", 
near : [120.105148,30.447977 ], 
num : 100, 
spherical : true, 
maxDistance :500/6378 , 
query:{ 
    $or:[ 
     {"online":2}, 
     {"online":1,"uptimestap":{$gte: 1348156800000}} 
    ] 
} 
} 
Questions connexes