2015-03-19 3 views
0

У меня есть две коллекции A + B. Оба они созданы на том же мероприятии. B создается несколько строк до A. Теперь мне нужно сохранить в A _id B. Как получить идентификатор только что созданного B? Я новичок в метеор и mongoDB, является ли _id внутренне переданным назад для создания, так что он уже доступен (я не нашел указаний на это) или мне нужно перечитать B? Если да, то как мне сделать это лучше всего?Crossreference две коллекции

EDIT

Я понимаю, что _id передается обратно на сервер после вставки.

Клиент:

Meteor.call('addB',b); 

Сервер:

'addB':function(b){ 
    return B.insert(b); 
}, 

Как я могу передать B._id клиенту, так что я могу сделать, на клиенте, что-то вроде:

a.id_of_B = B._id 
Meteor.call('addA',a); 

ответ

2

collection.insert возвращает значение созданного поля _id. В документах говорится: «Возвращает свой уникальный _id».

+0

Спасибо, collection.insert обеспечивает _id на сервере, есть Methode передать идентификатор direcly обратно в Meteor.call ('XX', YY); от клиента? – MBushveld

+0

Думаю, на ваш вопрос ответили сейчас, но когда вы делаете вставку на клиенте, клиент (а не сервер) будет генерировать идентификатор для вас, поэтому вы имеете доступ к нему напрямую и не должны использовать методы или аналогичный. –

0

Чтобы вернуть значения клиенту простой обратного вызова может быть использован:

Здесь снова ссылку на документы collection.insert

Клиент:

Meteor.call('addB',b function(error, result) { 
     BId = result; 
}); 

Сервер:

'addB':function(b){ 
    return B.insert(b); 
    }, 
0

Помните, что в общем вам не нужен Meteor.call() для вставки в co llection. Вы можете делать обе вставки на клиенте (если коллекции доступны там), и эти вставки будут автоматически синхронизироваться с сервером.

var a = {...}; // some object 
var b = {...}; // some other object 


B.insert(b,function(err,id){ // asynchronous style 
    a.idOfB = id; 
    A.insert(a); 
}) 

a.idOfB = B.insert(b); // synchronous style 
A.insert(a); 
Смежные вопросы