2016-10-18 4 views
1

У меня есть документ, показанный нижеКак запросить словарь в Mongo Document?

Это моя C структура # для этого документа

public class MetaData 
{ 
    [BsonId] 
    public ObjectId _Id { get; set; } 
    [BsonElement("User")] 
    public IDictionary<Int64, FirstUser> User { get; set; } 
} 

public class FirstUser 
{ 
    [BsonElement("Name")] 
    public String Name { get; set; } 
    [BsonElement("Id")] 
    public Int64 Id { get; set; } 
} 

Это моя BSON структура этого документа

/* 1 */ 
{ 
    "_id" : ObjectId("5805c1ced520b54bd4192214"), 
    "User" : [ 
     [ 
      NumberLong(1), 
      { 
       "Name" : "FirstUser", 
       "_id" : NumberLong(1) 
      } 
     ] 
    ] 
} 

/* 2 */ 
{ 
    "_id" : ObjectId("5805c1ced520b54bd4192215"), 
    "User" : [ 
     [ 
      NumberLong(1), 
      { 
       "Name" : "SecondUser", 
       "_id" : NumberLong(2) 
      } 
     ] 
    ] 
} 


/* 3 */ 
{ 
    "_id" : ObjectId("5805c1ced520b54bd4192216"), 
    "User" : [ 
     [ 
      NumberLong(1), 
      { 
       "Name" : "ThirdUser", 
       "_id" : NumberLong(3) 
      } 
     ] 
    ] 
} 


/* 4 */ 
{ 
    "_id" : ObjectId("5805c1ced520b54bd4192217"), 
    "User" : [ 
     [ 
      NumberLong(1), 
      { 
       "Name" : "FourthUser", 
       "_id" : NumberLong(2) 
      } 
     ] 
    ] 
} 

мне нужны все документы, которые имеющие «Имя» как «FirstUser». Для этого, как мне сформировать запрос MONGO?

+0

Ваш BSON схемы и ваши классы не кажется, match ... ваш BSON, похоже, имеет «Пользователь» как массив массива объектов, а не только словарь. –

+0

Могу ли я предложить вам использовать Aggregation Framework для его решения? Если да, я могу написать вам ответ. –

+0

Я уже устал, что он работает, Но проблема здесь в том, что я не могу получить более 16 МБ. Несколько раз я должен получать более 16 МБ. –

ответ

1

Проблема заключается в том, что ваши словарные ключи являются числами. Обычно вы используете что-то вроде "User.1.Name": "FirstUser", но этот синтаксис фактически делает что-то еще: поиск второго элемента в User, который имеет Name=FirstUser (потому что индексирование основано на нуле).

Если у вас есть только один ключ в User, вы можете использовать "User.0.Name": "FirstUser".

+0

Это работает, Но проблема здесь в том, что пользователь может быть любым, где мы не можем сказать, что он всегда на первом месте в словаре. –

+0

Можете ли вы привести пример своей схемы, когда это так? – Tomer

0

Вы можете сделать это из Монго оболочки, используя следующие:

db.collection.find({'User.Name': 'FirstUser'}); 

Или из C# драйвера вы можете сделать следующее:

var c = await wat.FindAsync(x => x.User[0].Name == "FirstUser"); 
var metaData = await c.ToListAsync(); 
+0

На самом деле мне нужен запрос mongo, потому что сначала я делаю запрос, тогда я пытаюсь взять документ. Как сделать для этого –

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