0

パラメータのリストに基づいてコレクションをクエリする必要があります。たとえば、私のモデルは次のとおりです。

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...
}

指定したユーザーが所有し、作成日で並べ替えられたすべての製品をクエリする必要があります。

例えば:

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

可能であれば、foreach 内ではなく、1 つのクエリで実行する必要があります。必要に応じてモデルを変更できます

4

2 に答える 2

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();
于 2011-11-20T07:58:11.857 に答える
1

$in 識別子を探しているようです。次のように製品を照会できます。

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

その JavaScript 配列 [ownerId1, ...] を所有者の独自の配列に置き換えるだけです。

注: このクエリはあまり効率的ではないと思います。MongoDB の DBRef は、基本的に非リレーショナル データベースに関係を追加するもので、うまくいきませんでした。ownerID を製品オブジェクトに直接格納し、それに基づいてクエリを実行することをお勧めします。

于 2011-11-15T16:55:25.610 に答える