收藏
回答

云开发lookup连表查询主表不能指定条件吗,现在主表与另一个表match不匹配主表的记录也返回?

云开发lookup连表查询主表不能指定条件吗,现在主表与另一个表match不匹配主表的记录也返回,意思主表有几条记录就返回几条。

book表
[
  { type: 1, detailId: 2001, _id: xxxx12323},
  { typ: 0, detailId: 67676, _id: xxxx90909}
]
order表
[
  { detailId: 2001, _id: xxsdd,num: 3},
  { detailId: 9999, _id: xxxgyg, num: 999}
] 


1、想查book表type=1,且book表detailId等于order表detailId的记录。预期输出:

{ type: 1, detailId: 2001, _id: xxxx12323, num: 3}


2、真实输出(条件不匹配的主表记录也返回了):

  { type: 1, detailId: 2001, _id: xxxx12323, num: 3},
  { typ: 0, detailId: 67676, _id: xxxx90909} //这个没有匹配的也返回了


3、代码如下(麻烦注意这个代码$.eq([1, '$$book_type']):

const _ = db.command
		const $ = _.aggregate
		const result = await db.collection('book').aggregate()
		  .lookup({
		    from: 'order',
		    let: {
		      book_dId: '$detailId',
			  book_type: '$type'
		    },
		    pipeline: $.pipeline()
		          .match(_.expr($.and([
		            $.eq(['$detailId', '$$book_dId']),
                                        //想在这加主表的过滤内容type=1貌似不起作用,想不到还有哪个地方可以放判断主表type=1的条件
					$.eq([1, '$$book_type'])
		          ])))
		      .done(),
		    as: 'collectionList',
		  })
		  .replaceRoot({
			newRoot: $.mergeObjects([$.arrayElemAt(['$collectionList', 0]), '$$ROOT'])
		  })
		  .project({
		    collectionList: 0
		  })
		  .end()


$.eq([1, '$$book_type']这个是想判断找出主表type=1的记录,不起作用,有没有其他方法判断主表type=1(即主表与另一个表条件不匹配的记录不返回)

回答关注问题邀请回答
收藏

1 个回答

  • stop eating
    stop eating
    09-17

    match

    09-17
    有用 1
    回复 11
    • 浩
      09-17
      代码里面已经用了match,有什么办法可以让主表不匹配的数据不返回呢
      09-17
      回复
    • 浩
      09-17回复stop eating
      大佬 现在我返回了这个没匹配的也返回了,是我的代码有问题吗
      09-17
      回复
    • stop eating
      stop eating
      09-17回复
      我没看到你代码啊
      09-17
      回复
    • 浩
      09-17回复stop eating
      额 我重新贴一下
      09-17
      回复
    • stop eating
      stop eating
      09-17回复
      .aggregate().match() 你不是主表吗
      09-17
      回复
    查看更多(6)
登录 后发表内容
问题标签