Camel / MongoDB - $ in in operator,引用另一个集合/文档数组

时间:2014-11-22 18:18:46

标签: java mongodb apache-camel

我找到了this blog post寻找组织关系的方法。我对此感到困惑的是以下语句背后的语法。我凭借javascript变量意识到,以下是可能的..

var party = { 
  _id: "chessparty", 
  name: "Chess Party!",
  attendees: ["seanhess", "bob"] 
}

var user = { _id: "seanhess", name: "Sean Hess", events: ["chessparty"]}

db.events.save(party)
db.users.save(user)

db.events.find({_id: {$in: user.events}}) // events for user
db.users.find({_id: {$in: party.attendees}}) // users for event

但是,在最后两行中,让我旋转的是什么,因为我在Java中尝试做的事情是这样的。所以我理解这个想法,但我想用Java实现这一点,更具体地说,是Camel / MongoDB组件。

我一直在引用the following documentation并查看" findAll"操作。所以我需要先运行一个查询来获取数组,例如" user.events"然后运行第二个查询以查找事件列表?或者有没有办法引用该领域"事件"在集合" db.user"作为" db.events"?

的查询的一部分

使用单个查询对以下内容进行调整..

pseudo idea: db.events.find({_id: {$in: [db.user.events]}})

最终,我希望将其翻译成以下内容......

from("direct:findAll")
    .setBody().constant("{ \"_id\": {$in :\"user.events\" }}")
    .to("mongodb:myDb?database=sample&collection=events&operation=findAll")
    .to("mock:resultFindAll");

我对mongodb camel组件有点新意,所以我想知道是否有任何大师已经在那里做过那样的事情?并就此问题提出任何建议。或者在没有2天的反复试验的情况下找出这个简单的问题是不可能的。?

谢谢!

1 个答案:

答案 0 :(得分:0)

我想我已经把这个问题包起来了,现在已经有一段时间了,几周前我能够解决这个问题。

基本上我会在事件集合中存储一组userId ..

示例:

{
    _id : 22bjh2345j2k3v235,
    eventName : "something",
    eventDate : ISODate(...),
    attendees : [
        "abc123",
        "def098",
        "etc..."
    ]
}

基本上将用户分配给事件。通过这种方式,我可以找到用户参与的所有事件,并且每个事件都会显示一个用户列表。

如果我想为用户查找所有事件:

from("direct:findAll")
.setBody().simple("{ \"attendees\": \"${header.userId}\" }")
.to("mongodb:myDb?database=sample&collection=events&operation=findAll")
.to("mock:resultFindAll");