Доступ к службе MongoDB Rest для получения документа внутри документа

#c# #rest #mongodb #mongodb-.net-driver

#c# #rest #mongodb #mongodb-.net-driver

Вопрос:

с активированными mongodb и rest я хотел бы запросить документ внутри другого документа, каков синтаксис? В моем примере у меня есть коллекция Person, которая содержит документ Order для каждого пользователя.

Например, у меня есть эта схема

 public Person{
    public int Id {get;set;}
    public IList<Order> Order {get;set;}
}

public Order{
    public int Id {get;set;}
    public string OrderName {get;set;}
}
  

Если я хочу запросить пользователя с Id = 2, мне просто нужно ввести этот URL:

http://localhost:28017/MyDatabase/PersonCollection/?filter_Id=2

Но что, если я хочу запросить заказ с Id = 40?

http://localhost:28017/MyDatabase/PersonCollection/?filter_Order.Id=40

Но это не работает, оно возвращает все заказы без моего фильтра по Id = 40.

Каково решение?

Спасибо, Джон

Комментарии:

1. Можете ли вы показать документ одному человеку?

Ответ №1:

Синтаксис такой же, как обычно, поэтому следующий запрос должен сработать:

 http://localhost:28017/MyDatabase/PersonCollection/?filter_Order.Id=40
  

Но ваш документ должен выглядеть следующим образом:

 {
  "_id": 1,
  "Order": [
    {
      "Id": 40,
      "OrderName": "name"
    }
  ]
}
  

Комментарии:

1. привет, да, мой личный документ выглядит точно так, как вы написали. И я снова пробую ваш синтаксис, он по-прежнему возвращает все заказы вместо одного заказа. 🙁

2. @JohnSmith: Что в поле запроса в http-ответе? Также вы пробовали запускать тот же запрос из mongshell или какого-либо инструмента пользовательского интерфейса для mongodb (например, mongovue для Windows)? filter_Order.Id должно сработать на 100%, я это тестировал.

3. Я не понимаю, что вы подразумеваете под «полем запроса в http-ответе». У меня есть MongoVUE, бесплатная версия, я не вижу, могу ли я вставить в нее свой Http-запрос? Вот как выглядит мой личный документ внутри MongoVUE {0} _id Orders [4] {0}{…} _id OrderName {1}{…} {2}{…}

4. Ответ должен быть таким: { "offset" : 0, "rows": [ ], "total_rows" : 0 , "query" : { "Order.Id" : 40 } , "millis" : 0 } Здесь существует поле «запрос».

5. @JohnSmith: С ответом все в порядке. Order.Id на языке mongodb звучит как «Дайте мне людей, которые содержат элемент заказа с идентификатором = 10».