Мы можем объединить две коллекции, используя sub-запрос mongoDB. Вот пример, Комментарии -
`db.commentss.insert([
{ uid:12345, pid:444, comment:"blah" },
{ uid:12345, pid:888, comment:"asdf" },
{ uid:99999, pid:444, comment:"qwer" }])`
Пользователи -
db.userss.insert([
{ uid:12345, name:"john" },
{ uid:99999, name:"mia" }])
Суб-запрос MongoDB для JOIN -
`db.commentss.find().forEach(
function (newComments) {
newComments.userss = db.userss.find( { "uid": newComments.uid } ).toArray();
db.newCommentUsers.insert(newComments);
}
);`
Получить результат из недавно созданная коллекция -
db.newCommentUsers.find().pretty()
Результат -
`{
"_id" : ObjectId("5511236e29709afa03f226ef"),
"uid" : 12345,
"pid" : 444,
"comment" : "blah",
"userss" : [
{
"_id" : ObjectId("5511238129709afa03f226f2"),
"uid" : 12345,
"name" : "john"
}
]
}
{
"_id" : ObjectId("5511236e29709afa03f226f0"),
"uid" : 12345,
"pid" : 888,
"comment" : "asdf",
"userss" : [
{
"_id" : ObjectId("5511238129709afa03f226f2"),
"uid" : 12345,
"name" : "john"
}
]
}
{
"_id" : ObjectId("5511236e29709afa03f226f1"),
"uid" : 99999,
"pid" : 444,
"comment" : "qwer",
"userss" : [
{
"_id" : ObjectId("5511238129709afa03f226f3"),
"uid" : 99999,
"name" : "mia"
}
]
}`
Надеюсь, что это поможет.
Качество вывода Haxe зависит от языкового бэкэнда (чтобы иметь согласованное поведение во всех бэкэндах), но его всегда можно улучшить Когда вы компилируете его в JavaScript, у него возникает ощущение «я дома».
class HelloWorld {
static public function main() {
trace("Hello World");
}
}
Результаты:
(function () { "use strict";
var HelloWorld = function() { };
HelloWorld.main = function() {
console.log("Hello World");
};
HelloWorld.main();
})();
Использование @:nativeGen
и зависящей от платформы функции печати (вместо специфичной для Haxe, требующей информации о местоположении) обычно является хорошим началом,
@:nativeGen class Main {
static function main() {
cs.system.Console.WriteLine("hi!");
}
}
public class Main {
public Main() {
}
public static void main() {
global::System.Console.WriteLine(((string) ("hi!") ));
}
}
Как уже упоминалось, многословие варьируется в зависимости от платформы - например, Haxe-> JS или Haxe-> AS3 создает довольно написанный от руки код, в то время как Haxe-> C # и Haxe-> C ++ включают множество неявных приведений, чтобы исключить любой риск двусмысленности кода.
Можно использовать API CustomJSGenerator от Haxe для написания пользовательских генераторов для языков, отличных от JS (и преобразования кода для соответствия соглашениям / многословию) - например, я создал Haxe-> GML (сценарий язык, напоминающий смесь генератора плоских C и JS), и позволил ему очень близко соответствовать исходной структуре: