$lookup 中的 MongoDB 额外参数,可能吗?

托本鲁德加德

我想从属性中找到所有 active=true,并将每个记录与翻译汇总在一起!我只想要英文文本“gb”,而不是丹麦文本“dk”

property
{
    "_id" : "111",
    "unique" : "ATL-D406",
    "name" : "Atlantis",
    "active" : true
},
{
    "_id" : "222",
    "unique" : "WAT-606",
    "name" : "Wong Amat Tower", 
    "active" : true
}


translation
{
    "_id" : "aaa",
    "language" : "gb",
    "property" : "111",
    "texts" : "Great Condo with Pool View and Balcony"
},
{
    "_id" : "bbb",
    "language" : "dk",
    "property" : "111",
    "texts" : "Lækker Lejlighed med Pool udsigt og Balkon"
},
{
    "_id" : "ccc",
    "language" : "gb",
    "property" : "222",
    "texts" : "Luxury with Direct Beach Front"
},
{
    "_id" : "ddd",
    "language" : "dk",
    "property" : "222",
    "texts" : "Luksus direkte på Stranden"
}

据我所知,Mongodb 只允许 $lookup 中的一个字段匹配,除了非常复杂的 $redact $$KEEP $$PRUNE(这似乎是一种非常复杂的方法)之外,有没有办法做到这一点?或者我只做两个单独的发现会更好吗?或者有没有办法将两个独立发现的结果结合起来并投影您想要的字段?像: - 找到 active = true 的所有属性 - 找到所有翻译 where language = "gb" - 组合它们并投影一些字段......

db.getCollection("property").aggregate(

    // Find all active properties
    { 
        $match: {active:true}
    },

    // Find matching translation record
    {
        $lookup: {
            from: "translation",
            localField: "_id",
            foreignField: "property",
            as: "translate"
        }   
    }

)   

我能想到的唯一方法是从js中找到两个,然后在那里做所有的工作。

菲利克斯

您必须使用其他解决方案(比$$KEEP$$PRUNE):

  1. 展开结果并匹配您想要的语言:

添加一个$unwind阶段,然后在translate.langagefield上过滤文档

db.getCollection("property").aggregate([
    {  $match: {active:true}},
    {  $lookup: {
            from: "translation",
            localField: "_id",
            foreignField: "property",
            as: "translate"
        }   
    }, 
    { $unwind: "$translate"}, 
    { $match : {"translate.language": "dk"}}
]) 
  1. 翻译集合拆分为多个集合

另一种解决方案是按语言收集一个翻译集合,例如translation_entranslation_dk等等。所以你只需要$lookup在相应的语言集合上做:

db.getCollection("property").aggregate([
    {  $match: {active:true}},
    {  $lookup: {
            from: "translation_dk",
            localField: "_id",
            foreignField: "property",
            as: "translate"
        }   
    }
])

请注意,第二个选项会更快

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在MongoDB中执行$ lookup之后使用$ match

来自分类Dev

Spring数据mongo中的MongoDB $ Lookup

来自分类Dev

mongodb aggrregate $ lookup数组中的字段

来自分类Dev

在MongoDB中向$ lookup结果添加字段

来自分类Dev

mongodb aggrregate $ lookup数组中的字段

来自分类Dev

在MongoDB中执行$ lookup之后使用$ match

来自分类Dev

mongodb 聚合中的多个 $lookup 阶段

来自分类Dev

MongoDB $ lookup,其中_id为PHP中的foreignField

来自分类Dev

MongoDB $ lookup在具有不同值的对象数组中

来自分类Dev

如何在MongoDB中整理$ lookup生成的内部数组

来自分类Dev

如何在mongodb中的条件下应用$ lookup?

来自分类Dev

如何在mongodb $ lookup和管道中迭代列表

来自分类Dev

mongodb $ lookup数组子文档中的单个字段

来自分类Dev

在聚合查询中具有条件的Mongodb $ lookup

来自分类Dev

如何使用MongoDB(mongoose db)在汇总中添加$ lookup填充

来自分类Dev

MongoDB:使$ lookup将其输出放在数组内的对象中

来自分类Dev

MongoDB:使用$ lookup localField删除数组中的字段

来自分类Dev

mongodb $ lookup用于投影数组中的嵌套对象

来自分类Dev

MongoDb $ lookup在数组字段中嵌套文档

来自分类Dev

$match, $group, $lookup 查询中 $unwind 的 MongoDB 位置

来自分类Dev

MongoDB 聚合 $lookup 以从主集合中返回不匹配的项目

来自分类Dev

MongoDB聚合$ lookup $ match

来自分类Dev

MongoDB聚合查询$ lookup

来自分类Dev

MongoDB $ lookup和$ match

来自分类Dev

$ lookup搜索Mongodb

来自分类Dev

MongoDB中的可选参数

来自分类Dev

嵌套文档上的MongoDB $ lookup

来自分类Dev

MongoDB $ lookup:限制和用法

来自分类Dev

$ lookup的MongoDB结果非常慢

Related 相关文章

热门标签

归档