2015-05-21 3 views
1

Мне нужны все документы из разных коллекций, которые ссылаются на определенный «родительский» документ. Любое легкое обходное решение?Извлечение всех документов имеет ссылку на определенный документ в MongoDB

Мой наивный подход состоял бы в том, чтобы зацикливать все коллекции и закопать все документы и проверить условие. Любой более простой/более эффективный способ?

ответ

0

Мой наивный подход состоял бы в том, чтобы зацикливать все коллекции и закодировать все документы и проверить условие. Любой более простой/более эффективный способ?

Ну, без модели данных, на которую трудно ответить, но ссылка может иметь индекс, не так ли? Я имею в виду, вы знаете, какое поле является ссылкой? Например,

Users (parent) { 
    Id : ObjectId("123"), 
    ... 
} 

Comments { 
    Id : ObjectId("abc"), 
    UserId : ObjectId("123"), 
    ... 
} 

Questions { 
    Id : ObjectId("efc"), 
    UserId : ObjectId("123"), 
    ... 
} 

Тогда, зная, что UserId является ссылкой, вы можете позвонить db.Comments.find({ UserId : ObjectId("123") }) и найти все ссылки. Таким образом, вам не нужно проходить через все документы. Единственное, что вам нужно - это справочная таблица collection name -> name of the reference field

+0

Я бы не использовал какую-либо схему на стороне сервера, поэтому что-то, что предполагало бы самую общую situtation –

+0

', но ссылка могла иметь индекс, правый' .. да, я думаю. но тогда нужны какие-то схемы. –

+0

Это должно быть хорошо в домене приложения. В противном случае проблема заключается в том, что вы никогда не узнаете, что представляет собой ссылку, а что нет, но вы, безусловно, можете все время прокручивать все данные и полагаться на уникальность ключей. Но это звучит довольно уродливо. – mnemosyn

Смежные вопросы