Вы можете присоединиться к двум коллекциям в Монго, используя поиск, который предлагается в версии 3.2. В вашем случае запрос будет
db.comments.aggregate({
$lookup:{
from:"users",
localField:"uid",
foreignField:"uid",
as:"users_comments"
}
})
, или вы также можете присоединиться к пользователям, тогда будет небольшое изменение, как указано ниже.
db.users.aggregate({
$lookup:{
from:"comments",
localField:"uid",
foreignField:"uid",
as:"users_comments"
}
})
Он будет работать так же, как левое и правое соединение в SQL.
Сам нашел хороший ответ, публикуя здесь сообщения на случай, если другим интересно то же самое.
Нижеследующее основано на отличном учебном пособии в W3School: https://www.w3schools.com/howto/howto_html_include.asp
Я создал файл javascript custom_include_html.js
, и поместил его в папку /templates
моего плагина CKAN. (Я считаю, что это не файл шаблона, но он имеет непосредственное отношение к шаблонам, и в настоящее время меня не беспокоит изменение пути к загрузчику jinja2, поэтому я согласен с тем, чтобы он оставался в этой папке). Содержимое файла следующее, скопированное из учебника W3School, но размещенное здесь для вашей собственной справки:
function includeHTML() {
var x, i, elem, file, xhttp;
z = document.getElementByTagName("*");
for (i=0; i<z.length; i++) {
elem = z[i];
file = elem.getAttribute("custom-include-html");
if (file) {
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readystate == 4) {
if (this.status == 200) {elem.innerHTML = this.responseText;}
if (this.status == 400) {elem.innerHTML = "Page not found, sorry."}
elem.removeAttribute("custom-include-html");
includeHTML();
}
}
xhttp.open("GET", file, true);
xhttp.send();
return;
}
}
};
Затем в шаблоне Jinja2, определяющем страницу, которую я должен вставить в файл my_file.html
Я сделал блок как
{% block static_html_desc %}
<div custom-include-html="/my_file.html"></div>
{% endblock %}
Заметьте, что этот файл помещается в общую папку CKAN , именно так, как я хотел в моем вопросе выше.
В нижней части шаблона я называю скрипт javascript следующим образом:
{% block custom_javascript %}
<script type="text/javascript">
{% include custom_include_html.js" %}
includeHTML();
</script>
{% endblock %}
Файл my_file.html
затем обрабатывается в блоке {% block static_html_desc %}
.
На этом этапе нужно всего лишь заменить вызов my_file.html
чем-то не жестко закодированным, чтобы разные страницы загружали соответствующие файлы *.html
. Это легко сделать с помощью вспомогательных функций шаблонов.