LINUX.ORG.RU

Поиск елемента массива по _id MongoDB

 ,


0

1

Есть проект на Flask, что-то вроде багтрекера (не велосипеда ради, но опыта для). И в нём возникла одна проблема, суть такова: Есть проекты (Document), у каждого из них есть баги (EmbeddedDocument). У каждого из багов есть _id (ObjectId). Надо как-то находить баги по этому самому ObjectId. Помогите, уже больше недели с этим мучаюсь.


важный момент, через EmbeddedDocument делается на one-to-many, а one-to-few.

в твоем случае такое допускается, ток если багов будет мало. так чтобы наверняка не больше 16мб. это первое.

второе. EmbeddedDocument нужен только если сабдокументы тебе ВСЕГДА нужны вместе с основным документом. тогда они атомарно выгрузятся в один присест. удобно для комментариев в блоге например. естесвтенно, никакого поиска по _id даже не подразумевается.

в твоем случае — сделай себе коллекцию с багами, в каждом из которых держи id соответствующего проекта. а EmbeddedDocument тебе не нужен имхо.

VladimirMalyk ★★★★★
()
Последнее исправление: VladimirMalyk (всего исправлений: 1)

Насколько мне известно, никак. Надо переделывать схему.

Apple-ch ★★
()
Ответ на: комментарий от VladimirMalyk

если сабдокументы тебе ВСЕГДА нужны вместе с основным документом

В том-то и дело, что такое бывает очень редко, практически никогда.

Apple-ch ★★
()
Ответ на: комментарий от val-amart

ну, спорное утверждение. на тех хайлоад, что мне попадались, инженеры стремились чтобы в мускуле на выборках не было джойнов, а только селекты.
короче, делали из мускула монгу чтобы добиться приемлимого быстродействия. с той только разницей, что alter table монге не нужен.

VladimirMalyk ★★★★★
()
Ответ на: комментарий от VladimirMalyk

скажи мне, ты что первый раз видишь это видео? ;)

val-amart ★★★★★
()

Думаю надо делать мапредьюсом, чтобы органично дополнить эту кривую схему данных.

Vit ★★★★★
()
Ответ на: комментарий от monk

Возвращает документ, в который встроен EmbeddedDocument, а не сам EmbeddedDocument. Но сейчас делаю как выше сказали - баги в отдельной коллекции.

kosc
() автор топика
Ответ на: комментарий от kosc

Но сейчас делаю как выше сказали - баги в отдельной коллекции.

Теперь понял. Можешь сделать так

db.document.find( { EmbeddedDocument: { _id: 69 } },
                  { EmbeddedDocument: { $elemMatch: { _id: 69 } } } )

Получишь только строки с нужным _id. http://docs.mongodb.org/manual/reference/operator/projection/elemMatch/#proj....

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.