草庐IT

MongoDB 从文档中提取子数组

coder 2023-11-05 原文

我如何从这个文档集合中传递

/* 1 */
{
    "F" : [ 
        {
            "n" : "test1",
            "v" : "value1"
        }, 
        {
            "n" : "test2",
            "v" : "value2"
        }
    ],
    "POR" : [ 
        {
            "n" : "1test1",
            "v" : "1value1"
        }, 
        {
            "n" : "1test2",
            "v" : "1value2"
        }, 
        {
            "n" : "1test3",
            "v" : "1value3"
        }
    ]
}

/* 2 */
{
    "F" : [ 
        {
            "n" : "2test1",
            "v" : "2value1"
        }, 
        {
            "n" : "2test2",
            "v" : "2value2"
        }
    ],
    "POR" : [ 
        {
            "n" : "2test1",
            "v" : "2value1"
        }, 
        {
            "n" : "2test2",
            "v" : "2value2"
        }
    ]
}

/* 3 */
{
    "F" : [ 
        {
            "n" : "3test1",
            "v" : "3value1"
        }, 
        {
            "n" : "3test2",
            "v" : "3value2"
        }
    ],
    "POR" : [ 
        {
            "n" : "3test1",
            "v" : "3value1"
        }
    ]
}

为此:

{
    "ITEMS": [
        { "n": "2test1", "v": "2value1" },
        { "n": "2test2", "v": "2value2" },
        { "n": "1test1", "v": "1value1" },
        { "n": "1test2", "v": "1value2" },
        { "n": "1test3", "v": "1value3" },
        { "n": "3test1", "v": "3value1" }
    ]
}

我想从几个文档中提取子数组元素,但我找不到方法/方法。

尝试的第一种方法:

db.test.aggregate( [ { $unwind : "$POR" } ] ).pretty();

最佳答案

我认为这可以满足您的需求:

> db.uwnd.aggregate([
     {$unwind:"$F"},
     {$unwind:"$POR"},
     {$group:{_id:null,items:{$addToSet:"$F",$addToSet:"$POR"}}}
   ]).pretty()

鉴于上面的数据,这将返回以下文档:

{
        "_id" : null,
        "items" : [
                {
                        "n" : "1test3",
                        "v" : "1value3"
                },
                {
                        "n" : "1test1",
                        "v" : "1value1"
                },
                {
                        "n" : "1test2",
                        "v" : "1value2"
                },
                {
                        "n" : "2test1",
                        "v" : "2value1"
                },
                {
                        "n" : "2test2",
                        "v" : "2value2"
                },
                {
                        "n" : "3test1",
                        "v" : "3value1"
                }
        ]
}

因此查询展开两个数组,然后对数据进行分组,将来自 "F""POR" 对象的条目添加到新的项目数组

关于MongoDB 从文档中提取子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41226509/

有关MongoDB 从文档中提取子数组的更多相关文章

  1. ruby-on-rails - Rails - 从命名路由中提取 HTTP 动词 - 2

    Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba

  2. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

    我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

  3. ruby - 是否有内置的 Ruby 1.8.7 将数组拆分为相同大小的子数组? - 2

    我已经开始了:defsplit_array(array,size)index=0results=[]ifsize>0whileindex如果我在[1,2,3,4,5,6]上运行它,比如split_array([1,2,3,4,5,6],3)它将产生这个数组:[[1,2,3],[4,5,6]]。在Ruby1.8.7中是否已经有可用的东西可以做到这一点? 最佳答案 [1,2,3,4,5,6].each_slice(3).to_a#=>[[1,2,3],[4,5,6]]对于1.8.6:require'enumerator'[1,2,3,4

  4. ruby - 如何在ruby中提取方括号内的内容 - 2

    我正在尝试提取方括号内的内容。到目前为止,我一直在使用它,它有效,但我想知道我是否可以直接在正则表达式中使用某些东西,而不是使用这个删除功能。a="Thisissuchagreatday[coolawesome]"a[/\[.*?\]/].delete('[]')#=>"coolawesome" 最佳答案 差不多。a="Thisissuchagreatday[coolawesome]"a[/\[(.*?)\]/,1]#=>"coolawesome"a[/(?"coolawesome"第一个依赖于提取组而不是完全匹配;第二个利用前瞻和

  5. ruby - 使用 ruby​​ 从文本中删除 url - 2

    给定一个文本,我想删除url部分并保留其他文本。例子:'blablabla...blablabla...http://bit.ly/someuriblablabla...'成为'blablabla...blablabla...blablabla...'是否有任何ruby​​内置方法可以有效地执行此操作? 最佳答案 尝试使用正则表达式:(?:f|ht)tps?:\/[^\s]+ 关于ruby-使用ruby​​从文本中删除url,我们在StackOverflow上找到一个类似的问题:

  6. 用于从 Open3.popen3 标准输出中提取值的正则表达式 - 2

    如何获取外部命令的输出并从中提取值?我有这样的东西:stdin,stdout,stderr,wait_thr=Open3.popen3("#{path}/foobar",configfile)if/exit0/=~wait_thr.value.to_srunlog.puts("Foobarexitednormally.\n")puts"Testcompleted."someoutputvalue=stdout.read("TX.*\s+(\d+)\s+")puts"Outputvalue:"+someoutputvalueend我没有在标准输出上使用正确的方法,因为Ruby告诉我它不能

  7. ruby - 使用 Ruby CSV 提取一列 - 2

    我一直在尝试从csv文件中获取单个列。我已经阅读了文档,http://www.ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html但仍然不太了解如何使用它。如果我使用CSV.table,与CSV.read相比,响应速度非常慢。我承认我正在加载的数据集非常大,这正是我只想从中获取单个列的原因。我的请求目前看起来像这样@dataTable=CSV.table('path_to_csv.csv')当我调试时,我得到了的响应#ThedocumentationsaysIshouldbeabletouseby_col(),butwhenItrytooutpu

  8. ruby - 在 Ruby 中,如何从具有值的哈希中提取键 - 2

    当我写这篇文章时,我以为我是Ruby巨人:#havingthishashhash={'Portugal'=>1,'France'=>2,'USA'=>3}#country_idcomesfrominputcountry_name=(hash.select{|k,v|v==country_id.to_i}.first||[]).first它确实正确地提取了国家名称,如果找不到国家也不会失败。我对此非常满意。但是我的导师说它可以/应该在可读性、长度和性能方面进行优化!还有什么比这更清晰/更快的呢?请指教 最佳答案 嗯,看来你的导师是对的

  9. ruby-on-rails - 在 Ruby 中提取 IMG 标签 - 2

    是否可以从Ruby中的HTMLblock中提取IMG标签(或只是IMG标签的src属性)?例如,如果我有一个HTMLblock,例如:Loremipsumdolorsitamet,laboreetdoloremagnaaliqua.Duisauteiruredolorinreprehenderitinvoluptatevelitessecillumdoloreeufugiatnullapariatur.我可以通过正则表达式或其他方法只提取IMG标签或该IMG标签的src吗?提前感谢您的任何建议! 最佳答案 使用Nokogiri:re

  10. ruby - 如何从 Proc 对象中提取代码? - 2

    给定一个Proc对象,是否可以查看其中的代码?例如:p=Proc.new{test=0}我需要的是通过某种方式从已创建的Proc对象中获取字符串“test=0”。 最佳答案 您可以使用ruby2ruby图书馆:>>#testedwith1.8.7>>require"parse_tree"=>true>>require"ruby2ruby"=>true>>require"parse_tree_extensions"=>true>>p=Proc.new{test=0}>>p.to_ruby=>"proc{test=0}"您还可以将此过程

随机推荐