我应该如何使用$ in进行MongoTalk查询?

时间:2017-02-01 13:36:02

标签: mongodb smalltalk pharo

我需要使用$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存在,这是非常有希望的,但我在测试或项目文档中找不到任何示例。谁知道如何使用它?谢谢!

3 个答案:

答案 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 ].