jjzjj

mongodb - 向输出 json 添加其他属性

coder 2023-11-05 原文

有一个User的集合

{
    "_id" : ObjectId("5a0d45ca8af3a91847b7cf95"),
    "updatedAt" : ISODate("2017-11-16T09:34:14.651Z"),
    "createdAt" : ISODate("2017-11-16T08:01:14.119Z"),
    "name" : "John",
    "email" : "test1@gmail.com",
    "groupsFavorite" : [ 
        ObjectId("5a0d45db8af3a91847b7cf96")
    ],
    "groups" : [ 
        ObjectId("5a0d45db8af3a91847b7cf96"), 
        ObjectId("5a0d45e18af3a91847b7cf97")
    ],
    "__v" : 3
}

有一组集合

/* 1 */
{
    "_id" : ObjectId("5a0d45db8af3a91847b7cf96"),
    "updatedAt" : ISODate("2017-11-16T08:01:31.815Z"),
    "createdAt" : ISODate("2017-11-16T08:01:31.815Z"),
    "userId" : ObjectId("5a0d45ca8af3a91847b7cf95"),
    "title" : "New title",
    "slug" : "new-title-1",
    "description" : "Lorem",
    "__v" : 0
}

/* 2 */
{
    "_id" : ObjectId("5a0d45e18af3a91847b7cf97"),
    "updatedAt" : ISODate("2017-11-16T08:01:37.005Z"),
    "createdAt" : ISODate("2017-11-16T08:01:37.005Z"),
    "userId" : ObjectId("5a0d45ca8af3a91847b7cf95"),
    "title" : "New title",
    "slug" : "new-title-2",
    "description" : "Lorem",
    "__v" : 0
}

/* 3 */
{
    "_id" : ObjectId("5a0d5cb0cd59342da943d55a"),
    "updatedAt" : ISODate("2017-11-16T09:38:56.912Z"),
    "createdAt" : ISODate("2017-11-16T09:38:56.912Z"),
    "userId" : ObjectId("5a0d5c48cd59342da943d559"),
    "title" : "New title",
    "slug" : "new-title-3",
    "description" : "Lorem",
    "__v" : 0
}

有一种方法可以返回特定用户的组。 有必要将这些数据添加到favorite: truefalse 的新属性中以建表。

例如:

{
    "_id" :"5a0d45db8af3a91847b7cf96",
    "updatedAt" : "2017-11-16T08:01:31.815Z",
    "createdAt" : "2017-11-16T08:01:31.815Z",
    "userId" : "5a0d45ca8af3a91847b7cf95",
    "title" : "New title",
    "slug" : "new-title-1",
    "description" : "Lorem",
    "favorite": "true"
},
{
    "_id" : "5a0d45e18af3a91847b7cf97",
    "updatedAt" : "2017-11-16T08:01:37.005Z",
    "createdAt" : "2017-11-16T08:01:37.005Z",
    "userId" : "5a0d45ca8af3a91847b7cf95",
    "title" : "New title",
    "slug" : "new-title-2",
    "description" : "Lorem",
    "favorite": "false"
},
{
    "_id" : "5a0d5cb0cd59342da943d55a",
    "updatedAt" : "2017-11-16T09:38:56.912Z",
    "createdAt" : "2017-11-16T09:38:56.912Z",
    "userId" : "5a0d5c48cd59342da943d559",
    "title" : "New title",
    "slug" : "new-title-3",
    "description" : "Lorem",
    "favorite": "false"
}

最佳答案

您可以使用 $lookup 运算符来检查“用户”集合中的 _iduserId 字段。并且为了确定它是否存在,您可以使用 $eq 运算符。

db.getCollection('Groups').aggregate([
   {
      $lookup:
      {
        from: "User",
        localField: "_id",
        foreignField: "groupsFavorite",
        as: "FavoriteByGrp"
      }
   }
  ,{
      $lookup:
      {
        from: "User",
        localField: "userId",
        foreignField: "_id",
        as: "FavoriteByUsr"
      }
   }
  ,{
       "$project":
       {
           _id:1,
           updatedAt:1,
           createdAt:1,
           userId:1,
           title:1,
           slug:1,
           description:1,
           favorite: 
           { 
               "$cond": 
               { 
                   if: { "$eq": [ "$FavoriteByGrp._id", "$FavoriteByUsr._id" ] }, 
                   then: "true", 
                   else: "false" 
               } 
           }
       }

   }
 ])

结果:

/* 1 */
{
    "_id" : ObjectId("5a0d45db8af3a91847b7cf96"),
    "updatedAt" : ISODate("2017-11-16T08:01:31.815Z"),
    "createdAt" : ISODate("2017-11-16T08:01:31.815Z"),
    "userId" : ObjectId("5a0d45ca8af3a91847b7cf95"),
    "title" : "New title",
    "slug" : "new-title-1",
    "description" : "Lorem",
    "favorite" : "true"
}

/* 2 */
{
    "_id" : ObjectId("5a0d45e18af3a91847b7cf97"),
    "updatedAt" : ISODate("2017-11-16T08:01:37.005Z"),
    "createdAt" : ISODate("2017-11-16T08:01:37.005Z"),
    "userId" : ObjectId("5a0d45ca8af3a91847b7cf95"),
    "title" : "New title",
    "slug" : "new-title-2",
    "description" : "Lorem",
    "favorite" : "false"
}

/* 3 */
{
    "_id" : ObjectId("5a0d5cb0cd59342da943d55a"),
    "updatedAt" : ISODate("2017-11-16T09:38:56.912Z"),
    "createdAt" : ISODate("2017-11-16T09:38:56.912Z"),
    "userId" : ObjectId("5a0d5c48cd59342da943d559"),
    "title" : "New title",
    "slug" : "new-title-3",
    "description" : "Lorem",
    "favorite" : "false"
}

关于mongodb - 向输出 json 添加其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47330806/

有关mongodb - 向输出 json 添加其他属性的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  2. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  3. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的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

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby - 将 Bootstrap Less 添加到 Sinatra - 2

    我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它

  7. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  8. ruby - 通过 erb 模板输出 ruby​​ 数组 - 2

    我正在使用puppet为ruby​​程序提供一组常量。我需要提供一组主机名,我的程序将对其进行迭代。在我之前使用的bash脚本中,我只是将它作为一个puppet变量hosts=>"host1,host2"我将其提供给bash脚本作为HOSTS=显然这对ruby​​不太适用——我需要它的格式hosts=["host1","host2"]自从phosts和putsmy_array.inspect提供输出["host1","host2"]我希望使用其中之一。不幸的是,我终其一生都无法弄清楚如何让它发挥作用。我尝试了以下各项:我发现某处他们指出我需要在函数调用前放置“function_”……这

  9. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  10. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

随机推荐