MongoDB C# 驱动程序 - 根据特定项目 id 过滤数组列表

问题描述 投票:0回答:1

我刚开始使用 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
        }
    ]
}
c# mongodb mongodb-query mongodb-.net-driver
1个回答
1
投票

从您的问题和评论中,您期望使用

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

演示

© www.soinside.com 2019 - 2024. All rights reserved.