【问题标题】:How to retrieve a specific fields from two mondoDb joined collections using Morphia?如何使用 Morphia 从两个 mondoDb 连接的集合中检索特定字段?
【发布时间】:2017-03-06 22:24:08
【问题描述】:

我使用聚合 $lookup 加入两个集合。

"users"

{    
"_id" : ObjectId("5984f8c454b1fd6926c324fd"),
    "email" : "administrator@hotmail.com",
    "userId" : "uid",
    "userName" : "admin"
}
"userinfo"

{
    "_id" : ObjectId("59d82812b63f1c31cf906003"),
    "userId" : "uid",
    "phone" : "000000000"
}

我在“用户”实体类中使用@Reference(idOnly = true) 来引用第二个集合。我只想检索特定字段,例如:“email”、“userId”、“phone”。

Query<Users> query =  usersDAO.createQuery()
                .retrievedFields(true,"email", "userId", "phone")

它给我一个运行时错误,无法识别“电话”字段,因为它来自引用的集合“用户信息”。我尝试指定“userinfo.phone”等,但没有成功。当“电话”字段从查询中删除时,它工作正常。 实现这一目标的正确方法是什么?

谢谢!

【问题讨论】:

    标签: mongodb morphia


    【解决方案1】:

    根据 $lookup 查询,userinfo 将被添加到用户文档中,并使用您在查询查询中为“as”字段提到的名称。

    所以你应该使用 phone like lookup_as.phone

    如果查找查询如下

    { “$查找”:{ “来自”:“用户信息”, "localField": "userId", "foreignField": "userId", “作为”:“uinfo” } }

    所以在这种情况下你应该使用

    查询查询 = usersDAO.createQuery() .retrivedFields(true,"email", "userId", "uinfo.phone")

    【讨论】:

    • 由于我没有明确指定 MongoDB 查找查询(Morphia 确实在后台创建了一些查询)“uinfo”别名似乎无法通过 Morphia 获得,因此“uinfo.phone”引发异常。
    • 让我澄清一下我的问题。我需要使用 Morphia 加入两个 MondoDB 集合并检索一组特定字段。
    • 新的 Morphia project() 函数有什么等价物吗?在 Morphia 1.3.2 中?在同一行获取多个字段
    猜你喜欢
    • 2014-10-15
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多