Мы можем объединить две коллекции, используя 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"
}
]
}`
Надеюсь, что это поможет.
Правильный синтаксис будет выглядеть примерно так:
#define MY_MACRO(ident) \
int ident
int main() {
MY_MACRO(test);
test =42;
return test;
}
Однако, вы рассматривали typedefs ? В отличие от typedef, макросы считаются плохой практикой.
##
здесь не применимо, так как он объединяет токен с чем-то еще
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MY_MACRO(var) int var
или
#define MY_MACRO(var) \
int var \
void foo(void)
{
MY_MACRO(a);
a = rand();
printf("%d\n",a);
}
##
вставляет два токена вместе в один токен.
#define poem(var)\
int jack##var;
// Produces 'int jacksprat;'
poem(sprat)
В вашем случае вам не нужно делать ничего особенного, вы можете просто использовать аргумент напрямую:
#define MY_MACRO(var)\
int var;
Я бы не рекомендовал делать такие вещи. Во всяком случае, есть две проблемы. Прежде всего, чтобы пропустить новую строку, вам нужно \
, а не /
.
Во-вторых, ##
не так. То, что он делает, соединяет var
и int
. Таким образом, с MY_MACRO(foo)
вы получите intfoo;
, но вы хотите int foo;
Макрос должен быть таким:
#define MY_MACRO(var) \
int var