私は私のコレクションを照会しようとしていますが、私はここでC#foreachループでMongoDBのQueryとQueryBuilderを使用するには?
Query.And()
にある種の「追加」動くかどうかはわかりませんが、私のドメインモデルはItem
文書を作成することです:
public class Item
{
public ObjectId Id { get; set; }
public string ItemTypeTemplate { get; set; }
public string UsernameOwner { get; set; }
public IList<ItemAttribute> Attributes { get; set; }
}
IList<ItemAttribute>
ここでItemTypeTemplate
に応じて、コレクションの変更(アイテムの属性の所定のリストに検索キーのいくつかの並べ替え)
Item
文書のサンプルです:
{
"_id" : ObjectId("5130f9a677e23b11503fee72"),
"ItemTypeTemplate" : "Tablet Screens",
//can be other types like "Batteries", etc.
//which would change the attributes list and values
"UsernameOwner" : "user032186511",
"Attributes" : [{
"AttributeName" : "Screen Size",
"AttributeValue" : "10.1"
}, {
"AttributeName" : "Pixel Density",
"AttributeValue" : "340"
}]
}
PROBLEM
IList<ItemAttribute>
の「動的」な性質を考えると、私は手動ので、私は、クエリを構築するためにループを使用して考えAttributeName
とAttributeValue
のための追加のクエリ条件を指定することはできません。
QueryBuilder<Item> qbAttributes = new QueryBuilder<Item>();
foreach (var attribute in item.Attributes)
{
qbAttributes.And(
Query.EQ("Attributes.AttributeName", attribute.AttributeName),
Query.EQ("Attributes.AttributeValue", attribute.AttributeValue),
);
}
var query = Query.And(
Query.EQ("TemplateId", item.TemplateId),
Query.NE("UsernameOwner", item.UsernameOwner)
);
return DBContext.GetCollection<Item>("Items").Find(query).AsQueryable();
qbAttributes
をquery
に追加するにはどうすればよいですか?私はqbAttributes.And(query);
を試しましたが、無効な引数で.Find(query)
のエラーが出力されました。
私は次のようになり、何か必要があります。テストされていないものの
var query = Query.And(
Query.EQ("ItemTypeTemplate", item.ItemTypeTemplate), //Tablet Screens
Query.NE("UsernameOwner", item.UsernameOwner) //current user
// this part is generated by the loop
Query.EQ("Attributes.AttributeName", "Screen Size"),
Query.EQ("Attributes.AttributeValue", "10.1"),
Query.EQ("Attributes.AttributeName", "Pixel Density"),
Query.EQ("Attributes.AttributeValue", "340")
);
配列要素については注意し、配列要素については注意してください。http://docs.mongodb.org/manual/reference/projection/elemMatch/を参照してください。配列の2 "と"の項を使用しても、attrの名前とattrの値が同じ要素内にあるわけではありません。 –