我的两个系列是:
产品类别
{
"_id" : ObjectId("5fca496b61e8a83e5cd0fb01"),
"category_id" : "1",
...
}
产品
{
"_id" : ObjectId("60684610f8f81d0013ce776d"),
"primary_parent_category" : "1653",
...
}
在$lookup中使用localfield和foreignfield,我可以获得预期的结果。
db.getCollection('product_category').aggregate([
{
"$lookup": {
"from": "product",
"localField": "category_id",
"foreignField": "primary_parent_category",
"as": "products"
}
},
// { "$match": { "products": { $exists: true, $not: { $size: 0 } } }},
{ "$match": { "products": { $exists: true, $ne: [] } }},
{
"$project":{
"child_categories": 0,
"featured_products": 0,
"related_brands": 0,
"child_category_names": 0
}
}
])
上面的工作正常,但我必须将$look kup中的管道模型用于另一个用例(用于添加$Geo近)。聚合查询如下所示。
db.getCollection('product_category').aggregate([
{
"$lookup": {
"from": "product",
"let": { "category_id": "$category_id" },
"pipeline": [
{ "$match": { "product": { $exists: true, $ne: [] } }},
{
"$project":{
"child_categories": 0,
"featured_products": 0,
"related_brands": 0,
"child_category_names": 0
}
}
],
"as": "products"
}
}
])
这没有按预期工作,并返回大量条目。$match中的$exists没有得到正确执行。任何帮助,不胜感激。提前谢谢。
正确的方法是@hhharsha36和@turivishal提到的方法的结合。我不得不将$exist的匹配查询移到$lookup块之后,而变量映射匹配块保持不变。
db.getCollection('product_category').aggregate([
{
"$lookup": {
"from": "product",
"let": { "category_id": "$category_id" },
"pipeline": [
{
"$match": {
"$expr":
{ "$eq": [ "$primary_parent_category", "$$category_id" ] },
}},
{
"$project":{
"child_categories": 0,
"featured_products": 0,
"related_brands": 0,
"child_category_names": 0
}
}
],
"as": "products"
}
},
{ "$match":
{ "products":
{
"$exists": true,
"$ne": [],
}
}
},
])
正如@turivishal所指出的,您必须在管道参数中的$match
中使用$expr
运算符。无论您试图使用$$
引用临时MongoDB变量,都必须这样做。
{
$match: {
{
$expr: {"$eq": ["$$<VAR-NAME-IN-LET>", "$<FOREIGN-KEY-IN-TARGET-COL>"]}
}
}
}
db.getCollection('product_category').aggregate([
{
"$lookup": {
"from": "product",
"let": { "category_id": "$category_id" },
"pipeline": [
{
"$match": {
"$expr": {
{ $eq: [ "$primary_parent_category", "$$category_id" ] },
}
"product": {
$exists: true,
$ne: [],
},
}
},
{
"$project":{
"child_categories": 0,
"featured_products": 0,
"related_brands": 0,
"child_category_names": 0
}
}
],
"as": "products"
}
}
])
以下带有卷装载的代码段在$JENKINS\u主页/工作区下创建maven依赖项/ 请注意,settings.xml镜像到我们的内部存储库。关于如何挂载的说明直接取自jenkins.io 有人知道为什么会这样吗? 这并不像在单机版中使用Docker那么简单。我已经创建了/var/jenkins/。Jenkins slave上运行构建的m2目录。确保新目录具有775权限(尽管这可能不是必需的),并将所
我正在使用spring Roo并希望访问Controller类中的一个bean,该类在ApplicationContext.xml中具有以下配置: 配置类本身是: 在我的Controller中,我认为一个简单的Autowired注释应该可以完成这项工作 在启动过程中,spring在setSkipWeeks方法中打印消息。不幸的是,每当我在控制器中调用config.getSkipWeeks()时,它
当我运行以下程序时,它只打印 然而,从Java 8的equalsIgnoreCase文档中我们发现: 如果以下至少一项为真,则两个字符c1和c2被视为相同的忽略情况: •对每个字符应用java.lang.character.ToUpperCase(char)方法会产生相同的结果 所以我的问题是为什么这个程序不打印 在这两种操作中,都使用了大写字符。
我试图使用来传输我根据前面的问题设置的自定义标头。 我在文件中读到... 我的属性包括:
我正在和selenium一起工作,刮一些数据。 有一个按钮在页面上,我正在点击说“Custom_Cols”。这个按钮为我打开了一个窗口,我可以在那里选择我的列。 我的问题是为什么新窗口上的元素不可见,即使我正在等待元素的可见。补充一下,我已经尝试增加延迟时间,但我还是会偶尔出现这个错误。 我的密码在这里