mongodb - 如何使用 Morphia 从两个 mongoDb 连接集合中检索特定字段?

标签 mongodb morphia

我使用聚合 $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/

相关文章:

Mongodb/Mongoid - 什么{:multi => true} mean

mongodb - MongoDB stats() 函数是否返回位或字节?

javascript - 如何根据 Mongoose 中的对象ID列表删除数组项?

java - 如何使用 Java 中的 Morphia 和 Play 框架从实体中检索特定字段

java - 使用 Morphia 及其 BasicDAO 更新实体

java - 域对象中的持久性注释是一种不好的做法吗?

python - 使 Python 类方法可在 Mongodb 中搜索

Mongodb 按键分组

java - Morphia - BasicDBObject 无法转换为 MyClass

java - 如何解决这个 Morphia 映射问题??? ---> 警告 [org.mongodb.morphia.mapping.DefaultCreator] - 未在 dbObj : 中找到定义的类