我创建了一个聚合管道,它执行以下操作:
代码:
Custom.aggregate([{
$match: {
'_id': mongoose.Types.ObjectId(req.params.id)
}
},
{
$lookup: {
from: 'styles',
localField: 'styleId',
foreignField: 'id',
as: 'style'
}
},
{
$unwind: '$style'
},
{
$lookup: {
from: 'default',
localField: 'styleId',
foreignField: 'id',
as: 'default'
}
},
{
$unwind: '$default'
},
]).then(docs => res.json(docs))
}
这是当前输出:
{
"_id": "597774cc09064e2e4e9fedb7",
"updatedAt": "2017-07-25T16:41:48.823Z",
"createdAt": "2017-07-25T16:41:48.823Z",
"styleId": "401648805",
"colorId": null,
"selectedOption": null,
"deselectedOption": null,
"currentOptions": [],
"requiredItems": [],
"includedItems": [],
"furtherRemovals": [],
"furtherAdditions": [],
"excludedItems": [],
"name": [],
"__v": 0,
"style": {
"_id": "5902276effabb8bd2926be71",
"id": "401648805",
"name": "Luxury 4dr Sedan (2.0L 4cyl Turbo 8A)",
"createdAt": "2017-07-26T15:28:36.778Z",
"updatedAt": "2017-07-26T15:49:14.366Z"
},
"default": {
"_id": "5978bfef32d246877e9cb363",
"updatedAt": "2017-07-26T16:14:39.779Z",
"createdAt": "2017-07-26T16:14:39.779Z",
"id": "401648805",
"requiredItems": [],
"includedItems": [],
"furtherRemovals": [],
"furtherAdditions": [],
"excludedItems": [],
"__v": 0
}
}
我试图将我的自定义对象包装在一个“自定义”命名对象中,它更适合我们的数据结构:
{
"custom": {
"_id": "597774cc09064e2e4e9fedb7",
"updatedAt": "2017-07-25T16:41:48.823Z",
"createdAt": "2017-07-25T16:41:48.823Z",
"styleId": "401648805",
"colorId": null,
"selectedOption": null,
"deselectedOption": null,
"currentOptions": [],
"requiredItems": [],
"includedItems": [],
"furtherRemovals": [],
"furtherAdditions": [],
"excludedItems": [],
"name": [],
"__v": 0,
},
"style": {
"_id": "5902276effabb8bd2926be71",
"id": "401648805",
"name": "Luxury 4dr Sedan (2.0L 4cyl Turbo 8A)",
"createdAt": "2017-07-26T15:28:36.778Z",
"updatedAt": "2017-07-26T15:49:14.366Z"
},
"default": {
"_id": "5978bfef32d246877e9cb363",
"updatedAt": "2017-07-26T16:14:39.779Z",
"createdAt": "2017-07-26T16:14:39.779Z",
"id": "401648805",
"requiredItems": [],
"includedItems": [],
"furtherRemovals": [],
"furtherAdditions": [],
"excludedItems": [],
"__v": 0
}
}
我认为它与聚合管道中的 $group 有关,但我不确定如何构建它。任何帮助将不胜感激 - MonogoDB/Mongoose 相对较新。
最佳答案
就我个人而言,我会 $project在 $match 之后将 $$ROOT 更改为管道的新名称“就在开头” :
Custom.aggregate([
{ $match: {
'_id': mongoose.Types.ObjectId(req.params.id)
}},
{ $project: { _id: 0, custom: '$$ROOT' } },
{ $lookup: {
from: 'styles',
localField: 'custom.styleId',
foreignField: 'id',
as: 'style'
}},
{ $unwind: '$style' },
{ $lookup: {
from: 'default',
localField: 'custom.styleId',
foreignField: 'id',
as: 'default'
}},
{ $unwind: '$default' }
]).then(docs => res.json(docs))
它是最少的代码并且兼容自$lookup以来的所有版本被介绍。
关于node.js - 将整个原始文档置于新的属性名称下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45333504/
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:
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中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只
当我创建一个Rails应用程序时,控制台:railsnewfoo我的代码可以使用字符串“foo”吗?puts"Yourapp'snameis"+app_name_bar 最佳答案 Rails.application.class将为您提供应用程序的全名(例如YourAppName::Application)。从那里您可以使用Rails.application.class.parent获取模块名称。 关于ruby-on-rails-应用程序的名称是否可以作为变量使用?,我们在StackOve