使用 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 函数