如何在Go的mongo-driver中编写FindOptions的包装函数

huangapple go评论153阅读模式
英文:

How to write a wrapper function for FindOptions in go mongo-driver

问题

我想在我的dbobject代码中为FindOptions编写一个包装函数,这样我就可以避免在我的服务代码中导入options包。基本上,我想在一个接口下容纳三个函数:

SetSkip()
SetLimit()
SetSort()

这样我就可以在一行代码中像这样使用Find().SetSkip().SetLimit(),这可行吗?

另外,我想了解一下MergeFindOptions的用法:

func MergeFindOptions(opts ...*FindOptions) *FindOptions

如果有示例,将非常有帮助。

英文:

I want to write a wrapper function for FindOptions in my dbobject code so that I can avoid importing package options in my service code . Basically i'm trying to accomodate three func under one interface

SetSkip() 
SetLimit()
SetSort()

so that i should be able to do something like Find().SetSkip().SetLimit() in a single line , is that doable ?

Also I want to know the usage of MergeFindOptions

func MergeFindOptions(opts ...*FindOptions) *FindOptions

Any examples will be of great help.

答案1

得分: 1

只需将options.FindOptions结构嵌入到自定义结构中即可。此外,您可以添加一个FindOptions函数来初始化此自定义结构,就像mongo包通过options.Find()一样。

package your_db_package

type YourFindOptions struct {
	*options.FindOptions
}

func FindOptions() YourFindOptions {
	return YourFindOptions{options.Find()}
}

// ---
package your_service_package

import "your_db_package"

func GetItems() {
  opts := your_db_package.FindOptions().SetSkip(123).SetLimit(456)
} 

根据名称MergeFindOptions和文档所说,它用于将多个FindOptions合并为一个新的FindOptions

MergeFindOptions将给定的FindOptions实例合并为一个单独的FindOptions,以最后一个为准。

英文:

Just embed the options.FindOptions struct into a custom one. Additionally you could add a FindOptions function to initialize this custom struct, like the mongo package do by options.Find().

package your_db_package

type YourFindOptions struct {
	*options.FindOptions
}

func FindOptions() YourFindOptions {
	return YourFindOptions{options.Find()}
}

// ---
package your_service_package

import "your_db_package"

func GetItems() {
  opts := your_db_package.FindOptions().SetSkip(123).SetLimit(456)
} 

As the name MergeFindOptions and the documentation says it's for merging multiple FindOptions into a new one:

> MergeFindOptions combines the given FindOptions instances into a single FindOptions in a last-one-wins fashion.

huangapple
  • 本文由 发表于 2022年11月1日 19:03:15
  • 转载请务必保留本文链接:https://go.coder-hub.com/74274913.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定