如何对文档中的子数组进行排序并保留父字段? 我有一个这样的集合:
{
"_id" : ObjectId("5d1757929831633ff8abb638"),
"name" : "Carraro Exlusive",
"description" : "Carraro Exlusive description",
"image" : "image-15",
"__v" : 0,
"sellers" : [
{
"_id" : ObjectId("5d1757929831633ff8abb639"),
"product" : ObjectId("5d1757929831633ff8abb638"),
"seller" : ObjectId("5d1518582f9254189ca92e59"),
"price" : 13,
"stock" : 5,
"__v" : 0
},
{
"_id" : ObjectId("5d175b60cf85a22f745235ee"),
"product" : ObjectId("5d1757929831633ff8abb638"),
"seller" : ObjectId("5d164802c4dc7811b0f34b86"),
"price" : 10,
"stock" : 222,
"__v" : 0
}
]
}
我想按价格从小到大对内部卖家数组进行排序。
我想要的结果是:
{
"_id" : ObjectId("5d1757929831633ff8abb638"),
"name" : "Carraro Exlusive",
"description" : "Carraro Exlusive",
"category" : ObjectId("5d151ad1b72c830f14374bb4"),
"brand" : ObjectId("5d151981b72c830f14374bb2"),
"image" : "image-15",
"__v" : 0,
"sellers" : [
{
"_id" : ObjectId("5d175b60cf85a22f745235ee"),
"product" : ObjectId("5d1757929831633ff8abb638"),
"seller" : ObjectId("5d164802c4dc7811b0f34b86"),
"price" : 10,
"stock" : 222,
"__v" : 0
},
{
"_id" : ObjectId("5d1757929831633ff8abb639"),
"product" : ObjectId("5d1757929831633ff8abb638"),
"seller" : ObjectId("5d1518582f9254189ca92e59"),
"price" : 13,
"stock" : 5,
"__v" : 0
}
]
}
我看到了下面的帖子,但我想保留父字段: Mongodb sort inner array
最佳答案
您可以使用以下聚合
db.collection.aggregate([
{ "$unwind": "$sellers" },
{ "$sort": { "sellers.price": 1 }},
{ "$group": {
"_id": "$_id",
"sellers": { "$push": "$sellers" },
"allFields": { "$first": "$$ROOT" }
}},
{ "$replaceRoot": {
"newRoot": {
"$mergeObjects": [
"$allFields",
{ "sellers": "$sellers" }
]
}
}}
])
关于mongodb - 如何在 $group 阶段后返回所有字段而不指定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915860/
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢