【发布时间】:2017-01-22 20:45:31
【问题描述】:
我正在尝试在文档的嵌套属性上创建一个 Mongo 查询,在 javascript Mongo shell 中它会是:
db.users.find({"services.facebook.email": "some@example.com"})
如何使用 MongoTalk 的查询来执行该查询?
【问题讨论】:
标签: mongodb mongodb-query pharo
我正在尝试在文档的嵌套属性上创建一个 Mongo 查询,在 javascript Mongo shell 中它会是:
db.users.find({"services.facebook.email": "some@example.com"})
如何使用 MongoTalk 的查询来执行该查询?
【问题讨论】:
标签: mongodb mongodb-query pharo
您可以使用“常规”Mongo 查询(也称为 JSON/字典查询)或使用 MongoQuery 和 Block 语法进行查询:
mongo := Mongo default.
db := mongo databaseNamed: 'test'.
users := db getCollection: 'users'.
user1 := { 'services' -> {
'facebook' -> { 'email' -> 'some@example.com' } asDictionary
} asDictionary
} asDictionary.
users add: user1.
"Query using dictionary"
users select: {'services.facebook.email' -> 'some@example.com'} asDictionary.
"Query using MongoQuery"
users select: [ :each | (each at: 'services.facebook.email') = 'some@example.com' ].
【讨论】:
users select: {'services.facebook.email' -> 'some@example.com'}。这可能是最接近原始 MongoShell 语法的。
asMongoQuery 或 asDictionary 连接起来
在 Voyage 中,您必须执行以下操作:
Users selectMany: [ :each | (each at: 'services.facebook.email') = 'some@example.com' ]
由于这是 MongoQueries,如果您直接使用 MongoTalk(没有 Voyage),您可以在 MongoCollection 中执行相同的查询。
【讨论】: