Camel / MongoDB - оператор $ in со ссылкой на другую коллекцию / массив документов

1

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

Благодарю!

Теги:
apache-camel

1 ответ

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");
  • 0
    какой тип вывода вы дали?
  • 0
    Не удалось преобразовать тип [java.util.ArrayList <?>] В тип [java.lang.String] для значения, и когда я использую приведенный выше код

Ещё вопросы

Сообщество Overcoder
Наверх
Меню