关于 pipeline 的问题

来源:4-5 【聚合操作】动手实战 - 吃里扒外的聚合管道阶段 - Lookup阶段(下)

爱吃apple的阿狸

2020-05-20

我有两个问题比较疑惑:

  1. 比较操作符 $gt 这些,一般是 balance: { $gt: 100 } 类似这种格式, 属性:{ 操作符: 值} ,这是之前学的。为啥在pipeline这里 可以 $gt: [ 属性 , 值 ] 这样写啊?两种方式都可以?
    图片描述
  2. 老师上节讲了aggregate 使用localField 和 foreignField 这种两个集合关联查询。这节又讲了不相关查询,我想知道,如果我使用localFiled这种关联集合字段,但是还想给查询集合添加条件,可不可以 一起使用?
    比如:
db.accounts.aggregate([
	$lookup: {
		from: xxx,
		localField: xxx,
		foreignField: xxx,
		let: { xxx: xxx},
		pipeline: {
			....
		}
	}
])

实际例子就是,我想要accounts集合的currency字段和 forex集合 的ccy字段关联,并且如果forex集合ccy字段有多个相同的USA的汇率,只是时间不同,我需要关联时间最新的那一个文档,该怎么写呢~。不知道我的意思表达清楚了没。。

写回答

1回答

Stannum

2020-05-26

同学你好~谢谢你经过认真思考提出的问题:
1. 这是两种操作中不同的语法要求,没有太多的道理可讲,经过练习,熟练掌握之后就会比较自然了
2. $lookup操作的第一种语法,就是专门为了进行localField和foreignField的相等比较而设计的。如果你需要进行其他更复杂的比较,则需要使用$lookup的第二种语法。你可以在pipeline中将相等比较作为一个条件列出,这和pipeline中的其他条件没有什么区别。你先自己试着写一下命令语句,好吗?

1
0

玩转MongoDB4.0(最新版) 从入门到实践

30%理论+70%实战,用实操检验真理,一门让你事半功倍的入门进阶课

1138 学习 · 197 问题

查看课程