2013-11-23 2 views
0

Имейте в виду проблему MongoDB здесь, когда я пытаюсь найти набор совпадений идентификаторов коллекции. Как Im строительный вид древовидной структуры на основе MongoDB. У меня есть объекты, которые содержат несколько атрибутов, таких как имя, родители и дети, чтобы они знали, что существуют отношения. Прямо сейчас я могу и объект идти, хотя его идентификатор ребенка и загружать каждый объект по одному. Я как-то заметил, что он намного быстрее получил их как коллекцию.C# Найти строку в списке <string> в MongoDB

Итак, теперь мой вопрос: как найти идентификатор intrest в коллекции на узлах дерева, представленных в MongoDB.

пример того, как документ MongoDB может выглядеть

{ 
    "_id" : ObjectId("523de6c6d7b47f1f74c98ba2"), 
    "IDType" : "root", 
    "Name" : "test root", 
    "Relations" : [{ 
     "Children" : { 
     "ChildrenList" : ["523de725d7b47f1d0c8242f1", "523de746d7b47f1d0c8242f5"] 
     }, 
     "Parents" : { 
     "ParentList" : [] 
     } 
    }] 
} 

Итак, как я нашел бы один из идентификаторов путем сопоставления с помощью ID в ChildrenList? это как Relations представляет собой массив Children and Parents. и эти два содержат массив идентификаторов, которые должны быть сопоставлены.

попробовал это без излишеств.

IMongoQuery searchQuery = Query.ElemMatch("Children", Query.EQ("ChildrenList", "523de746d7b47f1d0c8242f5")); 
+1

Поле «Дети» является потомком «отношений», поэтому минимально вы должны включить это в свой запрос. '" Relations.Children "' – WiredPrairie

+0

Я также не понимаю, почему дети и родители хранятся в массиве от отношений, а затем имеют дополнительный уровень объекта вместо сохранения непосредственно. – WiredPrairie

+0

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

ответ

1

Хорошо, поскольку я нашел решение благодаря WiredPrairie, я думал, что должен опубликовать его. Решение было неспециализированным, не используя ElemMatch для деталей, но записывая его так.

IMongoQuery searchQuery = Query.EQ("Relations.Parents.ParentList", objectID); 

Спасибо в любом случае за помощь в правильном направлении.

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