php

时间:2018-05-24 11:51:09

标签: php mongodb mongodb-query aggregate

我是MongoDB的新手,因此在mongo中进行连接查询时遇到问题请帮忙 我有两个收集"用户"和" user_login_details"

以前我有以下查询来从单个集合中获取记录

$data = $this->mongodb->select()->where(array('instituteId' => $instituteId))->where_not_in('type', array($instituteAdmin))->get('user');

现在我想从两个集合" user"中获取记录。具有单行,对于该行,在" user_login_details"中存在多个登录详细信息条目。集合。

我尝试使用聚合如下

db.user.aggregate([
{$match: { instituteId: '5954ee6dcf2169d50d51b88d'} },
{
 $lookup:
   {
     from: "user_login_details",
     localField: "_id",
     foreignField: "user_id",
     as: "user_login_details"
   }
}
]).pretty()

但是根据我在php中的第一个查询还需要一个条件

->where_not_in('type', array($instituteAdmin))

如何在聚合查询中添加此内容。

此上面的查询将返回具有多个登录详细信息的数据,如下所示。

{
"_id" : ObjectId("5954ee6dcf2169d50d51b88e"),
"email" : "abc@gmail.com",
"instituteId": "5954ee6dcf2169d50d51b88d",
"type": "Institute Admin"
"user_name" : "SA-011",
"religion" : "",
"caste" : "",
"bloodGroup" : "",
"groups" : "",
"reset_password" : NumberLong(1),
"aws_arn" : "",
"user_login_details" : [
    {
        "_id" : ObjectId("5b069955df05aeda0f8b4568"),
        "user_id" : ObjectId("5954ee6dcf2169d50d51b88e"),
        "ip" : "::1",
        "my_session_id" : "3199d6fd6ecfef1ec63bc1760115d116",
        "login_time" : ISODate("2018-05-24T10:52:05Z"),
        "logout_time" : ISODate("2018-05-24T11:04:47Z")
    },
    {
        "_id" : ObjectId("5b069c52df05ae6e358b4567"),
        "user_id" : ObjectId("5954ee6dcf2169d50d51b88e"),
        "ip" : "::1",
        "my_session_id" : "b2d33ea8bc7cc3bb8090fc1dd15f7371",
        "login_time" : ISODate("2018-05-24T11:04:50Z"),
        "logout_time" : ""
    }
]
}

我只需要来自" user_login_details"的最新记录。集合。

请使用PHP创建查询帮助我使用" CodeIgniter MongoDB Active Record Library"。

提前致谢。

0 个答案:

没有答案