0

私は検索を使用して大丈夫です:</ p>

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

次のコマンドも問題ありません。

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

しかし、Geospatial indexでgeoNearコマンドを使用したので、何も取得できません。

{
    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)}}
        ]
    }
}

要件は次のとおりです。オンラインクライアントに10分でポジションを更新してもらいたいのですが、どうすればよいですか?「pos」という名前の地理空間インデックスを作成しました。これには、uptimeとonlineの列が含まれます。

ありがとう。

4

2 に答える 2

0

クエリに $and は必要ありません。2 つのフィールドを追加すると、両方の条件に一致するドキュメントのみが返されます。

これを試して:

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)}

        }
    }
)

$and は、同じフィールドに 2 つの条件を設定する場合、または $and と $or を含むより複雑な論理クエリを作成する場合にのみ必要です。詳細については、$and のドキュメントを参照してください。

于 2012-09-17T07:29:10.877 に答える
0

最初はありがとう。$and の代わりに $or を使用しましたが、これも機能しませんでした。$or; を使用する必要があります。ここで、Date 列から変換するミリ秒(long 型)の列を追加し、Date 列を次のように変更しました。

{
geoNear : "Driver", 
near : [120.105148,30.447977 ],
num : 100,
spherical : true,
maxDistance :500/6378 ,
query:{
    $or:[
        {"online":2},
        {"online":1,"uptimestap":{$gte: 1348156800000}}
    ]
}
}
于 2012-09-24T02:12:27.383 に答える