私は探しています
db.runCommand({ geoNear: "users", near:[56,11], maxDistance:100/6387, distanceMultiplier:6387, query: { "city": /^bos/} })
ここで、距離(優先度)とbosで始まる都市名で結果を取得しようとしています
mysql で LIKE クエリ呼び出しを行っているため、結果を取得できません。
どうすればそれができるか教えてください。
私は探しています
db.runCommand({ geoNear: "users", near:[56,11], maxDistance:100/6387, distanceMultiplier:6387, query: { "city": /^bos/} })
ここで、距離(優先度)とbosで始まる都市名で結果を取得しようとしています
mysql で LIKE クエリ呼び出しを行っているため、結果を取得できません。
どうすればそれができるか教えてください。
コマンドに「クエリ」パラメータを追加すると、探している結果が得られます。
クエリが機能しない可能性がある理由の 1 つは、'i' フラグで大文字と小文字を区別しないように指定されていない限り、正規表現で大文字と小文字が区別されることです。
例えば:
> db.places.save({_id:1, city:"CityA", loc:[56.01,11.01]})
> db.places.save({_id:2, city:"CityB", loc:[56.02,11.02]})
> db.places.ensureIndex({loc:"2d"})
> db.runCommand({ geoNear: "places", near:[56,11], maxDistance:1, distanceMultiplier:1, query: { "city": /^city/} })
{
"ns" : "test.places",
"near" : "1100100000111111111100110000110000111111111100110000",
"results" : [ ],
"stats" : {
"time" : 0,
"btreelocs" : 0,
"nscanned" : 2,
"objectsLoaded" : 2,
"avgDistance" : NaN,
"maxDistance" : 0
},
"ok" : 1
}
何も返されません。ここで、クエリの正規表現部分に大文字と小文字を区別しないフラグを付けて、コマンドを再実行します。
> db.runCommand({ geoNear: "places", near:[56,11], maxDistance:1, distanceMultiplier:1, query: { "city": /^city/i} })
{
"ns" : "test.places",
"near" : "1100100000111111111100110000110000111111111100110000",
"results" : [
{
"dis" : 0.014142135623729393,
"obj" : {
"_id" : 1,
"city" : "CityA",
"loc" : [
56.01,
11.01
]
}
},
{
"dis" : 0.02828427124746381,
"obj" : {
"_id" : 2,
"city" : "CityB",
"loc" : [
56.02,
11.02
]
}
}
],
"stats" : {
"time" : 0,
"btreelocs" : 0,
"nscanned" : 2,
"objectsLoaded" : 2,
"avgDistance" : 0.0212132034355966,
"maxDistance" : 0.028292673810819097
},
"ok" : 1
}
>
両方の場所が返されます。Mongo クエリでの正規表現の使用に関するドキュメントは、「高度なクエリ」ページの「正規表現」セクションにあります: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions
上記で問題が解決し、正しいクエリを実行できるようになることを願っています。