我使用聚合$ lookup加入两个集合。
"users"
{
"_id" : ObjectId("5984f8c454b1fd6926c324fd"),
"email" : "administrator@hotmail.com",
"userId" : "uid",
"userName" : "admin"
}
"userinfo"
{
"_id" : ObjectId("59d82812b63f1c31cf906003"),
"userId" : "uid",
"phone" : "000000000"
}
我在我的"用户"中使用@Reference(idOnly = true)实体类引用第二个集合。我只想检索特定字段,例如:"电子邮件"," userId","电话"。
Query<Users> query = usersDAO.createQuery()
.retrievedFields(true,"email", "userId", "phone")
它给我一个运行时错误,无法识别&#34;手机&#34;提交,因为它来自引用的集合&#34; userinfo&#34;。我试着指定&#34; userinfo.phone&#34;等没有运气。当电话&#34;电话&#34;字段从查询中消除。 什么是实现这一目标的正确方法?
谢谢!
答案 0 :(得分:0)
根据$ 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")