使用MongoDB $facet操作符时Golang驱动报错求助
问题解决:MongoDB $facet 阶段报错 "A pipeline stage specification object must contain exactly one field"
错误原因很明确:你在data管道数组里把$skip和$limit放在了同一个bson.D对象中,而MongoDB要求每个管道阶段必须是仅包含单个操作符字段的文档。
修正后的代码如下:
metadataStage := bson.D{ {"$facet", bson.D{ {"metadata", bson.A{bson.D{ {"$group", bson.D{ {"_id", nil}, {"total", bson.D{{"$sum", 1}}}}}}, // 获取符合条件的文档总数 }}, {"data", bson.A{ // bson.D{{"$sort", sortStage}}, // 启用排序时需单独作为一个阶段 bson.D{{"$skip", skip}}, // 单独作为一个管道阶段 bson.D{{"$limit", limit}} // 单独作为一个管道阶段 }}, }}, }
关键修正点:
- 将
$skip和$limit拆分为两个独立的bson.D对象,分别作为data数组的元素 - 每个管道阶段(
$group/$skip/$limit/$sort)都必须是仅包含一个操作符的bson.D,确保符合MongoDB的管道规范
内容的提问来源于stack exchange,提问作者Claire Duong
相关产品推荐
相关产品推荐

