Это образец документа из коллекции mongoDB: -
{
"place_id" : "57222c6f498e78e3bfe0a575",
"title_AR" : "University Institute Hall",
"title_EN" : "University Institute Hall",
"description_AR" : "",
"description_EN" : "",
"best_photo" : "https://igx.4sqi.net/img/general/250x250/8862268_8oi3vr81Zm3ucytWjoSyvWXXS-7BUpNxKgyJvj0Lusc.jpg",
"city_AR" : "Kolkata",
"city_EN" : "Kolkata",
"state_AR" : "West Bengal",
"state_EN" : "West Bengal",
"country" : "IN",
"postal_code_AR" : "700073",
"postal_code_EN" : "700073",
"location_AR" : "7, Bankim Chatterjee St, Kolkata 700073, West Bengal, India",
"location_EN" : "7, Bankim Chatterjee St, Kolkata 700073, West Bengal, India",
"latitude" : 22.5744745110906,
"longitude" : 88.3630291046031,
"loc" : {
"type" : "Point",
"coordinates" : [
88.3630291046031,
22.5744745110906
]
},
"website" : "",
"email" : "",
"contact_number_AR" : "+913322416214",
"contact_number_EN" : "+913322416214",
"ratings_AR" : "",
"ratings_EN" : "",
"no_of_comments_AR" : 0,
"no_of_comments_EN" : 0,
"categories" : "4d4b7104d754a06370d81259,5032792091d4c4b30a586d5c,4d4b7104d754a06370d81259,5032792091d4c4b30a586d5c",
"category_array" : [
"4d4b7104d754a06370d81259",
"5032792091d4c4b30a586d5c",
"4d4b7104d754a06370d81259",
"5032792091d4c4b30a586d5c"
],
"created_date" : "2018-05-31 16:39:33",
"modified_date" : "2018-05-31 16:39:33",
"photo_saved" : 0,
"tip_saved" : 0,
"updated_at" : ISODate("2018-05-31T11:09:33.000Z"),
"created_at" : ISODate("2018-05-31T11:09:33.000Z")
}
Массив категорий содержит все идентификаторы категорий, под которые попадает место.
"category_array" : [
"4d4b7104d754a06370d81259",
"5032792091d4c4b30a586d5c",
"4d4b7104d754a06370d81259",
"5032792091d4c4b30a586d5c"
]
Я хочу выбрать места в зависимости от местоположения и категории. Вот мой сценарий: -
db.runCommand(
{
geoNear: "foursquare_places",
near: { type: "Point", coordinates: [ 88.363892, 22.572645 ] },
spherical: true,
query: { category_array: { $all: ["5032792091d4c4b30a586d5c"] }},
maxDistance: 500
}
)
Теперь вот проблема. Согласно документу Монго : -
Для точного совпадения массива, включая порядок элементов: -
db.inventory.find( { tags: ["red", "blank"] } )
Чтобы найти массив, который содержит как элементы «красный», так и «пустой», без учета порядка или других элементов в массиве: -
db.inventory.find( { tags: { $all: ["red", "blank"] } } )
В следующем примере запрашиваются все документы, где теги - это массив, содержащий в качестве одного из элементов строку «красный»
db.inventory.find( { tags: "red" } )
Каким будет запрос для извлечения всех записей, чей category_array содержит один или все элементы следующего массива?
findArray = ['4d4b7104d754a06370d81259', '4d4b7104d754a06370d81259',
'5032792091d4c4b30a586d5c']