MongoDB和NoRM - 根据参数列表查询集合

时间:2011-11-15 15:00:28

标签: mongodb mongodb-.net-driver norm

我需要根据参数列表查询集合。 例如我的模型是:

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
}

如果可能的话,我需要在一个查询中执行此操作。如果需要,我可以改变我的模型

2 个答案:

答案 0 :(得分:1)

听起来你正在寻找$ in标识符。您可以像这样查询产品:

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

只需将您的javascript数组[ownerId1,...]替换为您自己的所有者数组。

作为注释:我猜这个查询效率不高。我对MongoDB中的DBRefs没有太多运气,它基本上将关系添加到非关系数据库。我建议只需将ownerID直接存储在产品对象中,然后根据该查询进行查询。

答案 1 :(得分:1)

使用LINQ的解决方案是创建一个用户ID数组,然后像这样对它们进行.Contains:

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();