gpt4 book ai didi

mongodb - 指定要在 VoyageMongo 中返回的字段

转载 作者:可可西里 更新时间:2023-11-01 10:49:31 24 4
gpt4 key购买 nike

我正在寻找限制 VoyageMongo 查询返回字段的可能性。假设我有带有字段(personId、firstName、lastName)的 db.persons。在 Mongo 中,我可以通过
查询db.persons.find( { }, {'personId' : 1} )
在 VoyageMongo 中,似乎所有发送到 JSON 查询的字典条目都被整理成一个 $and 查询。 MongoQuery中有一个instVar和Accessors to fields,但我不知道如何设置它们。有没有办法在 VoyageMongo 中指定返回字段?

问候

最大

最佳答案

在搜索了一段时间后,我找到的唯一选择是扩展 Class、VOMongoRepository、VOMongoRepositoryResolver 和 MongoCollection。我添加了一个消息链
Class>>selectMany:aBlock 选项:someOptions
^self voyageRepository selectMany:self where:aBlock options:someOptions
VOMongoRepository>>selectMany: aClass 其中:aDictionary options: someOptions
|已选择 |
selected := resolver selectMany: aClass 其中:aDictionary 选项:someOptions。
^aClass = aClass 持久类
ifTrue: [已选择]
ifFalse:[选择选择:[:每个|每个 isKindOf: aClass ] ]
VOMongoRepositoryResolver>>selectMany: aClass where: aDictionary 选项: someOptions
self 执行:[ ^self basicSelectMany: aClass where: aDictionary options: someOptions ]
VOMongoRepositoryResolver>>basicSelectMany:aClass 其中:aDictionary 选项:someOptions
“选择 aClass 的实例应该在 mongo 查询中完成,而不是在这里”
self 标志:#todo。
^((self basicRawSelectMany: aClass where: aDictionary options: someOptions)
收集:[:每个 | self retrieveObjectOf: aClass json: each ]
作为:存储库集合类)
选择:[:每个 |每个 isKindOf: aClass ]
VOMongoRepositoryResolver>>basicRawSelectMany:aClass 其中:aDictionary 选项:someOptions
^self pool withDatabase: [ :db |
(self collectionAt: aClass inDatabase: db)
选择:字典
选项:一些选项]
MongoCollection>>选择:aDictionary options: someOptions
^ self 查询:[:query |
询问
其中:字典;
限制: (someOptions at: 'limit' ifAbsent: nil);
offset: (someOptions at: 'offset' ifAbsent: nil);
fields: (someOptions at: 'fields' ifAbsent: nil) ]

这解决了问题。消息以这种方式发送:

options := { 'fields' -> { 'personId' -> 1 } asDictionary } asDictionary.
^ self selectMany: [ :each |
(each at: 'name') = 'Max' ]
options: options

还可以在选项目录中添加限制和偏移量。因为我有很多字段的对象,所以只获取其中几个字段时的性能从 48000 毫秒变为 229 毫秒
我已经创建了一个带有扩展名的包。

关于mongodb - 指定要在 VoyageMongo 中返回的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43801636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com