MongoDB и NoRM - Запрос коллекции по списку параметров - PullRequest
0 голосов
/ 15 ноября 2011

Мне нужно запросить коллекцию на основе списка параметров. Например, моя модель:

public class Product
{
    string id{get;set;}
    string title{get;set;}
    List<string> tags{get;set;}
    DateTime createDate{get;set;}
    DbReference<User> owner{get;set;}
}

public class User
{
    string id{get;set;}
    ...other properties...
}

Мне нужно запросить все продукты, принадлежащие указанным пользователям и отсортированные по creationDate.

Например:

GetProducts(List<string> ownerIDs)
{
    //query
}

Мне нужно сделать это одним запросом, если возможно, не внутри foreach. Я могу изменить свою модель, если это необходимо

Ответы [ 2 ]

1 голос
/ 20 ноября 2011

Решением, использующим LINQ, является создание массива идентификаторов пользователей, а затем выполнение. Содержит на них следующее:

List<string> users = new List<string>();
foreach (User item in ProductUsers)
    users .Add(item.id);

return MongoSession.Select<Product>(p => users .Contains(p.owner.id))
                    .OrderByDescending(p => p.createDate)
                    .ToList();
1 голос
/ 15 ноября 2011

Похоже, вы ищете $ в идентификаторе.Вы можете запросить продукты, например, так:

db.product.find({owner.$id: {$in: [ownerId1, ownerId2, ownerId3] }}).sort({createDate:1});

Просто замените этот массив javascript [ownerId1, ...] своим собственным массивом владельцев.

Как примечание: я бы предположил этот запросне очень эффективно.Мне не очень повезло с DBRefs в MongoDB, который по существу добавляет отношения к нереляционной базе данных.Я бы предложил просто сохранить ownerID непосредственно в объекте продукта и запросить информацию на его основе.

...