使用 MongoDB .Net 驱动程序对存储在文档字段中的数组进行分页

Posted

技术标签:

【中文标题】使用 MongoDB .Net 驱动程序对存储在文档字段中的数组进行分页【英文标题】:Pagination on array stored in a document field using MongoDB .Net Driver 【发布时间】:2022-01-11 11:09:18 【问题描述】:

如何使用 C# 和 MongoDB .Net 驱动程序在 animals 字段中应用分页?

架构是:

[
    id: 1,
    name: "Tom",
    animals: ["cat", "dog", "fish", "bear", "dog1", "fish1", "bear1",]
,

    id: 2,
    name: "Rob",
    animals: ["shark", "snake", "fish", "bear", "panda"]
,

    id: 3,
    name: "Matt",
    animals: ["cat", "fish", "bear"]
]

here 给出了解决方案,但我发现很难在 C# 中实现。

下面是我的代码

var bsonSearchParams = new BsonDocument 
    new BsonElement ( "id" , id),
    new BsonElement  ( "animals", " $slice: [ 0, 3 ] " )
;
var result = await collection.Find(bsonSearchParams).FirstOrDefaultAsync();
return result;

我期待结果


    id: 1,
    name: "Tom",
    animals: ["cat", "dog", "fish"]

【问题讨论】:

【参考方案1】:

您的 bsonSearchParams 不正确,因为您在投影中包含了 slice 逻辑。

你需要.Slice(),这是ProjectDefinition的扩展方法。

public static ProjectionDefinition<TDocument> Slice<TDocument>(this ProjectionDefinition<TDocument> projection, FieldDefinition<TDocument> field, int skip, int? limit = null)

您的源代码应如下所示:

var bsonSearchParams = new BsonDocument 

    new BsonElement( "id" , id)
;

var bsonProjection = Builders<BsonDocument>.Projection
    .Slice("animals", 0, 3);

var result = await collection.Find(bsonSearchParams)
    .Project(bsonProjection)
    .FirstOrDefaultAsync();

示例代码和输出

【讨论】:

以上是关于使用 MongoDB .Net 驱动程序对存储在文档字段中的数组进行分页的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core 上的 GraphQL、MongoDB - 中间件?

如何使用 Java 对 MongoDB 中的文档进行批量更新?

MongoDB .Net Driver 2.x - 如何执行存储的 JS 函数

如何使用 PHP 驱动程序在 MongoDB 中创建存储函数

.NET平台的MongoDB使用

一起使用 mongoDb 和 MySQL