【问题标题】:Lookup inside first field of array of objects MONGO在 MONGO 对象数组的第一个字段中查找
【发布时间】:2018-11-29 10:21:50
【问题描述】:

我有一个数据集,我想在其中查找对象数组中的 id。现在当我添加查找时。它用查找结果替换完整的文档。现在在那个对象里面我有一些我想访问的其他内容,但是它被替换了。我也不想将lookup 放在该对象数组的所有元素中,只是第一个。主要是我想在查找完成后access scale

下面是我的数据集

"user_id" : ObjectId("5b17b992c440782b5a218cd2"),
        "commission" : [
                {
                        "commissson_id" : ObjectId("5bc05984b49e14243f2973ad"),
                        "scale" : "14"
                },
                {
                        "commissson_id" : ObjectId("5bc05992b49e14243f2973ae"),
                        "scale" : "14"
                },
                {
                        "commissson_id" : ObjectId("5bc05984b49e14243f2973ad"),
                        "scale" : "1"
                },
                {
                        "commissson_id" : ObjectId("5bc0596a414d30243f94b0de"),
                        "scale" : "1"
                }
             ]
             

到目前为止我已经尝试过这个

$pipe=[
			[
				'$match'=>
						[
							'_id'=> $user_id
						],
			],
			[
				'$lookup'=>
						[
							'from'=>'commission',
							'localField'=>'commission.0.commissson_id',
							'foreignField'=> '_id',
							'as'=> 'commission'
						]
			],
	];

【问题讨论】:

    标签: php database mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您需要首先$unwind 聚合commission 数组并使用$group 聚合进行回滚

    [ '$match'=> [ '_id'=> $user_id ]],
    [ '$unwind'=> '$commission' ],
    [ '$lookup'=> [
      'from'=> 'commission',
      'localField'=> 'commission.commissson_id',
      'foreignField'=> '_id',
      'as'=> 'commission.commission'
    ]],
    [ '$unwind'=> '$commission.commission' ],
    [ '$group'=> [
      '_id'=> '$_id',
      'commission'=> [ '$push'=> '$commission' ]
    ]]
    

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多