我刚开始使用 MongoDB C# 驱动程序。我的 MongoDB 集合中有以下内容。我需要根据
_id
过滤记录,例如:
Select * from item where _id = 2 and itemLists.Sizeid = 2
在 SQL 中。
我尝试过:
var filter = Builders<Item>.Filter.Eq(x => x.temid, ItemId);
var filter2 = Builders<Item>.Filter.ElemMatch(x => x.itemLists, Builders<ItemList>.Filter.Eq(x => x.Sizeid,sizeId));
var data = await Context.GetCollection<Item>("Item").Find(filter&filter2).FirstOrDefaultAsync();
上面的代码没有给我预期的结果。请帮忙。
我的MongoDB采集数据如下:-
{
"_id" : NumberInt(2),
"ItemName" : "Shirt",
"ItemDescripton" : "Men Trouser",
"itemLists" : [
{
"CategoryId" : NumberInt(1),
"CategpryName" : "Men",
"ColorId" : NumberInt(1),
"ColorName" : "Red",
"InitialQty" : NumberInt(30),
"AvailableQty" : NumberInt(28),
"ReserveQty" : NumberInt(2),
"Price" : 4560.0,
"OfferPrice" : 670.0,
"Images" : [
"/assets/Images/Men/m4.jpg",
"/assets/Images/Men/m5.jpg"
],
"Sizeid" : NumberInt(2),
"SizeName" : "XL",
"DetailId" : NumberInt(0),
"DeliveryCharges" : NumberInt(20),
"Brand" : "Allen Solly",
"CreatedOn" : ISODate("2022-12-07T17:10:19.881+0000"),
"CreatedBy" : "string",
"Active" : true
},
{
"CategoryId" : NumberInt(1),
"CategpryName" : "Men",
"ColorId" : NumberInt(2),
"ColorName" : "Blue",
"InitialQty" : NumberInt(10),
"AvailableQty" : NumberInt(6),
"ReserveQty" : NumberInt(4),
"Price" : 1400.0,
"OfferPrice" : 1200.0,
"Images" : [
"/assets/Images/Men/m3.jpg",
"/assets/Images/Men/m4.jpg"
],
"Sizeid" : NumberInt(1),
"SizeName" : "XL",
"DetailId" : NumberInt(0),
"DeliveryCharges" : NumberInt(120),
"Brand" : "Allen Solly",
"CreatedOn" : ISODate("2022-12-07T17:10:19.881+0000"),
"CreatedBy" : "string",
"Active" : true
}
]
}
从您的问题和评论中,您期望使用
itemLists
数组来过滤查询的文档,以获得 sizeId
标准。
您需要
ProjectionDefinition
和 ElemMatch
才能实现它。
ProjectionDefinition<Item> projection = Builders<Item>.Projection
.Include(x => x.Itemid)
.Include(x => x.ItemName)
.Include(x => x.ItemDescripton)
.ElemMatch(x => x.itemLists, Builders<ItemList>.Filter.Eq(y => y.Sizeid, sizeId));
var data = await _collection.Find(filter & filter2)
.Project<Item>(projection)
.FirstOrDefaultAsync();
演示