关于 reactiveMongo 中嵌入式 BSONDocument 的混淆

confusion regarding embedded BSONDocument in reactiveMongo

我在 MongoDB

中存储了以下数据
db.users.insert({id: 1,user: {firstname:"John",lastname:"Cena",email:["jc@wwe.com","jc1@wwe.com"],password:"YouCantSeeMe",address:{street:"34 some street", country:"USA"}}})

我查询如下,预计第一个查询将不起作用,但第二个可以。令我惊讶的是,情况正好相反。

此查询有效

val query1 = BSONDocument("user.firstname"->user.firstName)

这没有

val query2 = BSONDocument("user"-> BSONDocument("firstname"->user.firstName))

我观察到 query1 创建了以下结构(通过 运行 mongodb 在详细模式下,mongodb -v) { user.firstname: "John" }

但是 query2 创建了以下结构 { user: { firstname: "John" } }

这两个不一样吗(firstname在user里面)?

它们不一样。

第一个查询有效,因为您正在使用点表示法比较嵌入文档的字段。

第二个查询失败,因为您将整个文档与嵌入的文档进行比较。

https://docs.mongodb.com/manual/tutorial/query-embedded-documents/

https://docs.mongodb.com/manual/core/document/#dot-notation