У меня есть коллекция mongoDB, содержащая документы JSON в следующем формате. Это всего лишь образец, а не полный документ.
{
"_id": ObjectId("555ba8a6ae96b63b98969192"),
"toptags": {
"@attr": {
"artist": "Rihanna"
},
"tag": [
{
"count": "100",
"name": "pop",
"url": "http://www.last.fm/tag/pop"
},
{
"count": "89",
"name": "rnb",
"url": "http://www.last.fm/tag/rnb"
},
{
"count": "60",
"name": "female vocalists",
"url": "http://www.last.fm/tag/female%20vocalists"
},
{
"count": "55",
"name": "dance",
"url": "http://www.last.fm/tag/dance"
},
{
"count": "40",
"name": "Hip-Hop",
"url": "http://www.last.fm/tag/hip-hop"
},
{
"count": "21",
"name": "Rihanna",
"url": "http://www.last.fm/tag/rihanna"
},
]
}
}
В моей коллекции сотни подобных документов. Я хочу написать запрос, который будет возвращать имена «артистов», которые имеют заданный набор тегов, а значения «количества» этих тегов больше заданного значения.
Это два запроса, которые я пробовал до сих пор
collection_name.find({'$and': [{"toptags.tag.name":tag_array}, {"toptags.tag.count":{'$gte':count_value}}]}, {"_id":"1","[email protected]":"1"})collection_name.find({"toptags.artist": {$all : [{"$elemMatch" : {"name":tag_array, "count": {'$gt': count_value}}},]})
Ни один из вышеперечисленных запросов не работает. Я понимаю, что первый в корне неверен, потому что он не принимает значение "count" для тегов, переданных в качестве параметра. Но второй, я думаю, должен работать. Но я думаю, что мой синтаксис неверен. Где я ошибаюсь?
$gtзапрос поCountполям, измените тип данныхCountStringнаnumber- person Yogesh   schedule 21.05.2015@attrотсутствует при запросе к БД? - person Sylvain Leroux   schedule 21.05.2015@attrотсутствует. Есть некоторое несоответствие с его использованием. Это требуется при попытке получить имена исполнителей, но не при обращении к значениям тегов. Но второй запрос выше должен иметь@attr, вы правы. - person nixtish   schedule 21.05.2015