我有一个帐户集合,其中有关帖子的详细信息被非规范化。在每个账户文档中,都有一个页面字段,它是一个包含帖子信息的子文档数组。每个帖子文档都有一个标签字段,给定一个帐户 ID,我正在尝试使用适当的标签分组获取帐户中的页面,唯一的问题是,我希望将分组文档作为未分组文档的 sibling 。
示例:
{
_id : "account1",
pages : [
{
title : "New Page"
tag : "novel",
},
{
title : "Another New Page"
tag : "novel",
},
{
title : "One more New Page"
}
]
}
我的查询是这样的
db.accounts.aggregate([
{
$match : {
_id : "account1"
}
},
{
$unwind: "$pages"
},
{
$project: {
pages: 1,
tag: {
$ifNull : ["$pages.tag", "unassigned"]
}
}
},
{
$group: {
_id: "$tag",
pages: {
$push: "$pages"
}
}
}
])
目前,输出看起来像这样
{
"_id" : "novel",
"pages" : [
{
title : "New Page"
tag : "novel",
},
{
title : "Another New Page"
tag : "novel",
}
]
},
{
"_id" : "unassigned",
"pages" : [
{
title : "One more New Page"
tag : "unassigned",
}
]
}
但是我需要打开这个未分配的分组,输出应该是这样的
{
"_id" : "novel",
"pages" : [
{
title : "New Page"
tag : "novel",
},
{
title : "Another New Page"
tag : "novel",
}
]
},
{
title : "One more New Page"
}
最佳答案
下面的查询可以得到我们预期的输出:
db.accounts.aggregate([
{
$match : {
_id : "account1"
}
},
{
$unwind: "$pages"
},
{
$project: {
pages: 1,
tag: {
$ifNull : ["$pages.tag", "unassigned"]
}
}
},
{
$group: {
_id: "$tag",
pages: {
$push: "$pages"
}
}
},
{
$addFields:{
"data":{
$cond:[
{
$eq:["$_id","unassigned"]
},
"$pages",
[]
]
}
}
},
{
$unwind:{
"path":"$data",
"preserveNullAndEmptyArrays":true
}
},
{
$addFields:{
"data":{
$cond:[
{
$eq:["$_id","unassigned"]
},
"$data",
"$$ROOT"
]
}
}
},
{
$replaceRoot:{
"newRoot":"$data"
}
}
]).pretty()
数据集:
{
"_id" : "account1",
"pages" : [
{
"title" : "New Page",
"tag" : "novel"
},
{
"title" : "Another New Page",
"tag" : "novel"
},
{
"title" : "One more New Page"
},
{
"title" : "New page 2"
},
{
"title" : "New page 3"
}
]
}
输出:
{ "title" : "One more New Page" }
{ "title" : "New page 2" }
{ "title" : "New page 3" }
{
"_id" : "novel",
"pages" : [
{
"title" : "New Page",
"tag" : "novel"
},
{
"title" : "Another New Page",
"tag" : "novel"
}
]
}
说明:页面根据标签分组后,未分配的页面投影为新字段data。然后我们将展开数组。稍后,带有标签的文档也被分配给 data 字段,即 data 现在包含未分配的页面和分配的页面组。最后,我们可以将 data 投影为根文档。
关于mongodb - 在特定文档上放松,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57774992/
matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1
在读取/解析文件(使用Ruby)时忽略某些行的最佳方法是什么?我正在尝试仅解析Cucumber.feature文件中的场景,并希望跳过不以Scenario/Given/When/Then/And/But开头的行。下面的代码有效,但它很荒谬,所以我正在寻找一个聪明的解决方案:)File.open(file).each_linedo|line|line.chomp!nextifline.empty?nextifline.include?"#"nextifline.include?"Feature"nextifline.include?"Inorder"nextifline.include?
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
Ruby有一些不错的文档生成器,例如Yard、rDoc,甚至Glyph。问题是Sphinx可以做网站、PDF、epub、LaTex等。它在重组文本中完成所有这些事情。在Ruby世界中有替代方案吗?也许是程序的组合?如果我也能使用Markdown就更好了。 最佳答案 自1.0版以来,Sphinx有了“域”的概念,它是从Python和/或C以外的语言标记代码实体(如方法调用、对象、函数等)的方法。有一个rubydomain,所以你可以只使用Sphinx本身。您唯一会缺少的(我认为)是Sphinx使用autodoc从源代码自动创建文档
我想知道我应该如何着手这个项目。我需要每周向人们发送一次电子邮件。但是,这必须在每周的特定时间自动生成并发送。编码有多难?我需要知道是否有任何书籍可以提供帮助,或者你们中的任何人是否可以指导我。它必须使用rubyonrails进行编程。因此有一个网络服务和数据库集成。干杯 最佳答案 为什么这么复杂?您只需安排工作。您可以使用Delayed::Job例如。Delayed::Job让您可以使用run_at符号在特定时间安排作业,如下所示:Delayed::Job.enqueue(SendEmailJob.new(...),:run_
如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback
我怀念ipython的一件事是它有一个?为特定功能挖掘文档的运算符。我知道ruby有一个类似的命令行工具,但是我在irb中调用它非常不方便。ruby/irb有类似的东西吗? 最佳答案 Pry是IPython的Ruby版本,它支持?命令来查找有关方法的文档,但语法略有不同:pry(main)>?File.dirnameFrom:file.cinRubyCore(CMethod):Numberoflines:6visibility:publicsignature:dirname()Returnsallcomponentsofthef
情况:使用Rspec、FactoryGirl和VCR测试Rails应用程序。每次创建用户时,都会通过Stripe的API创建关联的Stripe客户。测试时,添加VCR.use_cassette或describe"...",vcr:{cassette_name:'stripe-customer'}do...到涉及用户创建的每个规范。我的实际解决方案如下:RSpec.configuredo|config|config.arounddo|example|VCR.use_cassette('stripe-customer')do|cassette|example.runendendend但这是
我正在尝试使用nokogirigem提取页面上的所有url及其链接文本,并将链接文本和url存储在散列中。FooBar我想回去{"Foo"=>"#foo","Bar"=>"#bar"} 最佳答案 这是一个单行:Hash[doc.xpath('//a[@href]').map{|link|[link.text.strip,link["href"]]}]#=>{"Foo"=>"#foo","Bar"=>"#bar"}拆分一点可以说更具可读性:h={}doc.xpath('//a[@href]').eachdo|link|h[link.t
我想从特定索引开始遍历数组。我该怎么做?myj.eachdo|temp|...end 最佳答案 执行以下操作:your_array[your_index..-1].eachdo|temp|###end 关于ruby-从特定索引开始迭代数组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/44151758/