繁体   English   中英

MongoDB聚合:数组中的值

[英]MongoDB Aggregation: Value in Array

我们在Ruby中有以下Testsnippet

def self.course_overview(course_member=nil)
  course_member = CourseMember.last if course_member == nil

  group_global = {"$group" =>
    {"_id" => { "course_id" => "$course_id",
                "title" => "$title",
                "place" => "$place",
                "description" => "$description",
                "choosen_id" => "$choosen_id",
                "year" => {"$year" => "$created_at"},
                "course_member_ids" => "$course_member_ids"}}
  }

  match_global = {"$match" => {"_id.course_member_ids" => {"$in" => "#{course_member.id}"} }}


  test = CoursePlan.collection.aggregate([group_global, match_global])

  return test
end

问题是“ match_global”语句。 我们想匹配在course_member_ids数组中出现Course_member ID的所有文档。

上面的语句失败,并显示以下错误:“ ...必须是数组”。 这对我来说很有意义,但是根据网络上的其他评论,这种方式应该可行。

有什么建议吗? 如何返回Course_member ID数组中的course_member ID所在的文档?

示例课程计划对象:

{
    "_id" : ObjectId("5371e70651a53ed5ad000055"),
    "course_id" : ObjectId("5371e2e051a53ed5ad000039"),
    "course_member_ids" : [ 
        ObjectId("5371e2a751a53ed5ad00002d"), 
        ObjectId("5371e2b251a53ed5ad000030"), 
        ObjectId("5371e2bb51a53ed5ad000033")
    ],
    "created_at" : ISODate("2014-05-13T09:33:58.042Z"),
    "current_user" : "51b473bf6986aee9c0000002",
    "description" : "Schulung 1 / Elektro",
    "fill_out" : ISODate("2014-04-30T22:00:00.000Z"),
    "place" : "TEST",
    "title" : "Schulung 1",
    "updated_at" : ISODate("2014-05-13T09:33:58.811Z"),
    "user_ids" : [ 
        ObjectId("51b473bf6986aee9c0000002"), 
        ObjectId("521d7f606986ae4826000002"), 
        ObjectId("521d8b3f6986aed678000007")
    ]
}

由于course_member_ids是一组课程成员,因此您应该测试其是否相等。 在shell语法中:

{$match:{"_id.course_member_ids":<valueYouWantToTest>}}

当您要选择具有特定单个值的文档时,此查询类似于find ,因此不需要$in

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM