我需要使用$in
执行一系列MongoDb文档,如文档https://docs.mongodb.com/manual/reference/operator/query/in/
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
我已尝试过这个但
conditions := { 'conditionIds' -> {'$in' -> [ 'uQqazzdwSYsEmqGNp' ] } asDictionary } asDictionary.
collection := database collectionAt: 'users'.
collection query: [ :q | q where: conditions ].
我看到MQInCondition
存在,这是非常有希望的,但我在测试或项目文档中找不到任何示例。谁知道如何使用它?谢谢!
答案 0 :(得分:4)
您可以使用1:1映射的javascript语法(例如传输目录)或使用MQuerry“自动”构建查询。以下示例:
mongo := Mongo default open.
db := mongo databaseNamed: 'playground'.
col := db getCollection: 'test'.
col add: {'field' -> 'value1'} asDictionary;
add: {'field' -> 'value2'} asDictionary.
col select: { ('field' -> { '$in' -> #('value1' 'value2') } asDictionary)}. "The javascript way"
col select: [ :each | (each at: 'field') in: #('value1' 'value2') ] "The Smalltalk way"
col select: [ :each | (each field) in: #('value1' 'value2') ]. "Even Smalltalkier :-)"
答案 1 :(得分:2)
你把[]误认为是数组初始值设定项,而在smalltalk中它是用于块的。只需使用{}。
collection query: { 'key' -> {
'$in' -> { val1 . val2 } } asDictionary } asDictionary
使用查询时:aBlock版本然后在块内部使用smalltalk表达式。但是你可以使用的表达式数量非常有限,并且到目前为止不支持$ in
答案 2 :(得分:1)
我在之前的尝试中发现了参数数组的语法错误,这个想法一般都是正确的。这是有效的:
conditions := { 'conditionIds' -> {'$in' -> #('uQqazzdwSYsEmqGNp') } asDictionary } asDictionary.
collection := database collectionAt: 'users'.
collection query: [ :q | q where: conditions ].