Я наткнулся на это сообщение в блоге в поисках способа организации отношений. То, что меня путает, это синтаксис следующего утверждения. Я понимаю, в силу переменных 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.
Я ссылался на следующую документацию и смотрел на операцию "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, поэтому мне интересно, есть ли какие-то гуру, которые уже были там, такие вещи? И попросите совета по этому вопросу. Или узнать без двух дней проб и ошибок, что это просто невозможно...?
Благодарю!
Мне показалось, что я завершу этот вопрос, прошло уже некоторое время, и несколько недель назад мне удалось проделать это.
В основном я хотел бы сохранить массив 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");