2014-11-22 18 views
1

Я столкнулся с this blog post в поисках способа организации отношений. То, что меня путает, это синтаксис следующего утверждения. Я понимаю, что в силу яваскрипта переменных возможно следующее ..

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, так что мне интересно, есть ли какие-то гуру, которые уже были там, что-то подобное? И попросите совета по этому вопросу. Или узнать без двух дней проб и ошибок, что это просто невозможно ...?

Спасибо!

ответ

0

Мне показалось, что я завершу этот вопрос, прошло некоторое время, и несколько недель назад я смог проделать это.

В принципе я бы до хранения массива иденты в коллекции событий ..

пример:

{ 
    _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"); 
Смежные вопросы