c# mongodb 查找对象数组

c# mongodb find array of objects

我想在我的文档中检索一组对象。在 shell 我使用这个:

db.products.findOne({ProductId : 1}).Seller

在 C# 中,这是我的 类

的结构
public class Product
{
    public double ProductId { get; set; }
    public string ProductName { get; set; }
    public string PurchaseDate { get; set; }
    public double Price { get; set; }
    public List<Seller> Seller { get; set; }
}

public class Seller
{
    public double SellerId { get; set; }
    public string SellerName { get; set; }
}

mongodb.net 驱动程序中的等效命令是什么?

db.products.findOne({ProductId : 1}).Seller

我希望输出为:

[
    {
        "SellerId" : 123,
        "SellerName" : "ABC"
    },
    {
        "SellerId" : 345,
        "SellerName" : "MGJ"
    }
]

请看附图output img

public async Task<Product> GetProduct(double productId)
{
    return await FindOneAsync(p => (p.ProductId == productId));
}
db1.aggregate([
    {
        $match: { ProductId: 1 }
    },{ $unwind: "$Seller" }, {
        $group: {
            _id: '$ProductId',
            SELLER: { $push: {SellerId: $SellerId, SellerName: $SellerName } }
        }  },  {
        $project:
        {
            _id: "$_id",
            SELLER: '$SELLER'
        }
    }]).toArray()
    .then(result => res.json(result))
    .catch(err => res.json(err))

我使用 mongoCLient。尝试使用 aggregate groupproject 来获得所需的输出.. 希望这有帮助

我想你在找投影。以下是您的操作方法:

public List<BsonDocument> GetSellers(double productId)
{
    var context = new Context();
    var filter = Builders<Product>.Filter.Eq(x => x.ProductId, productId);
    var project = Builders<Product>.Projection.Include(x => x.Sellers);
    var sellers = context.Product.Find(filter).Project(project).ToList();
    return sellers;
}

请注意,我将 Seller 更改为 Sellers,因为它是一个列表。我还将使用 ObjectId 作为 ID(而不是 double 或任何其他类型)。