@beduin01

MongoDB выбрать из вложенного массива?

Простой вопрос, не могу разобраться. Квадратные скобки это у нас в Mongo массив верно?
Как мне через find найти содержимое tags (и определенного значения в нем)
db.qtest.insert(
{
date: Date("2013-01-14"),
name: "Roma",
tags: [{Python:14,Ruby:10,C:4}]
}
)


Если что уточню. Я пытаюсь понять как делать find по вложенному массиву.
  • Вопрос задан
  • 2563 просмотра
Решения вопроса 1
Tark
@Tark
Pyramid'альный мир
db.qtest.find({'tags.0.Python': 14})

выдаст содержимое документа, где в нулевом элементе списка tags у ключа Python значение 14. А зачем вот так?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lega
Не пытайтесь сделать хитроумные запросы (которые зачастую медленные), часто лучше сделать структуру документа где можно будет легко и быстро доставать данные.

Например для вашей задачи можно сделать так:
> db.qtest.insert({
	date: Date("2013-01-14"),
	name: "Roma",
	tags:['python', 'ruby', 'c'],
	counts: {python: 14, ruby:10, c:4 }
})

Поиск:
> db.qtest.find({tags: 'python'}, {date: 1, name:1, 'counts.python':1}).pretty()
{
	"_id" : ObjectId("55a28f4624db1e49cecbc89f"),
	"date" : "Sun Jul 12 2015 21:01:10 GMT+0500 (YEKT)",
	"name" : "Roma",
	"counts" : {
		"python" : 14
	}
}

Далее можете сделать индекс по тегам db.qtest.ensureIndex({tags: 1}), и этот запрос будет работать быстро когда коллекция будет большая.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы