MongoDB не разрешает объединения, но вы можете использовать плагины для его обработки. Проверьте плагин mongo-join. Это лучшее, и я уже использовал его. Вы можете установить его с помощью npm прямо следующим образом npm install mongo-join
. Вы можете проверить полную документацию с примерами .
(++) действительно полезный инструмент, когда нам нужно объединить (N) коллекции
(- ), мы можем применять условия только на верхнем уровне запроса
Пример
var Join = require('mongo-join').Join, mongodb = require('mongodb'), Db = mongodb.Db, Server = mongodb.Server;
db.open(function (err, Database) {
Database.collection('Appoint', function (err, Appoints) {
/* we can put conditions just on the top level */
Appoints.find({_id_Doctor: id_doctor ,full_date :{ $gte: start_date },
full_date :{ $lte: end_date }}, function (err, cursor) {
var join = new Join(Database).on({
field: '_id_Doctor', // <- field in Appoints document
to: '_id', // <- field in User doc. treated as ObjectID automatically.
from: 'User' // <- collection name for User doc
}).on({
field: '_id_Patient', // <- field in Appoints doc
to: '_id', // <- field in User doc. treated as ObjectID automatically.
from: 'User' // <- collection name for User doc
})
join.toArray(cursor, function (err, joinedDocs) {
/* do what ever you want here */
/* you can fetch the table and apply your own conditions */
.....
.....
.....
resp.status(200);
resp.json({
"status": 200,
"message": "success",
"Appoints_Range": joinedDocs,
});
return resp;
});
});
Я не думаю, что с помощью hibernate (-core) можно отобразить любую коллекцию коллекций:
Коллекции могут содержать почти любые другой тип гибернации, включая все основные типы, нестандартные типы, компоненты, и, конечно, ссылки на другие сущностей.
(из официального документа )
Обратите внимание на почти и отсутствие типа коллекции.
Обходной путь: вам необходимо ввести новый тип «между» держателем коллекции и элементом. Этот тип можно сопоставить как объект или компонент, и он ссылается на исходное содержимое карты, в данном случае на список.
Что-то вроде:
@Entity
public class Holder extends DomainObject {
@OneToMany
private Map<Enum,InBetween> inBetweens;
}
@Entity
public class InBetween extends DomainObject {
@OneToMany
private List<Element> elements;
}
@Entity
public class Element extends DomainObject {
private long valueId;
private int otherData;
}
@Mappedsuperclass
public class DomainObject {
// provides id
// optimistic locking
// create and update date
}
Остальная часть сопоставления зависит от вашей конкретной ситуации, но скорее является прямолинейно.
Вот блог о коллекции коллекций в спящем режиме http://blog.xebia.com/2007/10/05/mapping-multimaps-with-hibernate/
Надеюсь, это поможет. Это помогло мне.
С уважением, Антон
Обратите внимание, что указанная ссылка на документацию Hibernate кажется устаревшей, я обнаружил, что работает следующее: http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections .html