2016-02-13 2 views
0

Я создаю приложение для обмена мгновенными сообщениями как часть Coursera responsive web development course с доктором Мэтью Йи-Кингом. Проект here; Я связался с конкретным сообщением для потомков.Почему `Meteor.findOne()` возвращает другой идентификатор каждый раз?

У меня есть коллекция, Chats, которая содержит Chatobjects. что я публикую клиенту.

The autopublish и insecure пакеты были удалены, так что я издаю коллекцию от сервера к клиенту с the following:

Meteor.publish("chats", function(){ 
    return Chats.find({$or: [{user1: Meteor.userId}, 
          {user2: Meteor.userId}]}); 
}); 

Клиент присоединяется к коллекции с the following:

Meteor.subscribe("chats"); 

Когда Я обращаюсь к объекту Chats на сервере через meteor mongo с db.chats.findOne(), я получаю объект с идентификатором.

Когда я получить доступ к нему на клиенте (Chrome 47) консоль с Chats.findOne(), я получаю объект с теми же значениями свойств, за исключением _id, что отличается каждый раз, когда я вызвать команду!

Что здесь не так? Я должен получать то же самое _id как сервер, не так ли?

+0

'.findOne()' не гарантирует заказ. –

+0

Но у меня только один документ в коллекции. –

+0

Тогда может быть только один _id –

ответ

0

Ошибка в publish function:

Meteor.publish("chats", function(){ 
    return Chats.find({$or: [{user1: Meteor.userId}, 
          {user2: Meteor.userId}]}); 
}); 

Прежде всего, Meteor.userId() функция. Во-вторых, в документации отмечается, что Meteor.userId() доступен везде кроме в функции публикации.

Вместо этого this.userIdshould be used в функции публикации.

Смежные вопросы