我使用聚合 $lookup 加入两个集合。
"users"
{
"_id" : ObjectId("5984f8c454b1fd6926c324fd"),
"email" : "administrator@hotmail.com",
"userId" : "uid",
"userName" : "admin"
}
"userinfo"
{
"_id" : ObjectId("59d82812b63f1c31cf906003"),
"userId" : "uid",
"phone" : "000000000"
}
我在“用户”实体类中使用@Reference(idOnly = true) 来引用第二个集合。我只想检索特定字段,例如:“电子邮件”、“用户 ID”、“电话”。
Query<Users> query = usersDAO.createQuery()
.retrievedFields(true,"email", "userId", "phone")
它给了我一个运行时错误,无法识别提交的“phone”,因为它来自引用集合“userinfo”。我尝试指定“userinfo.phone”等,但没有成功。当从查询中删除“电话”字段时,它工作正常。 实现该目标的正确方法是什么?
谢谢!
最佳答案
根据 $lookup 查询,userinfo 将添加到用户文档中,其中包含您在查找查询中为“as”字段提到的名称。
所以你应该使用 lookup_as.phone 之类的电话
如果查找查询如下
{ "$lookup": { "from": "userinfo", "localField": "userId", "foreignField": "userId", "as": "uinfo" } }
所以在这种情况下你应该使用
Query query = usersDAO.createQuery() .retrievedFields(true,"email", "userId", "uinfo.phone")
关于mongodb - 如何使用 Morphia 从两个 mongoDb 连接集合中检索特定字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42636742/