在我的流星应用程序中,我想根据聊天对象的成员发布一个聊天对象:基本上有两个成员,一个不是当前用户的成员是我想要发布的成员。这是代码。 (members
是一个总是包含两个不同用户ID的列表)
Meteor.publish('chatmate', function(chat_id) {
var chat = Chats.findOne({_id:chat_id, members: this.userId});
var chatmate = undefined; // just in case... didn't know any better
if (chat) {
for (var i = 0; i < 2; i++) {
if (chat.members[i] !== this.userId)
chatmate = Meteor.users.find(chat.members[i], {fields: {'profile.name': 1}});
}
}
return chatmate;
});
(PS:是的,我的出版物在服务器文件夹中)
我的问题是:我的第一行代码返回undefined
。但是如果我继续使用mongo并键入db.chats.findOne(ObjectId('<mychatsid>'))
,我会在输出中及其成员中获得记录。问题是,我似乎无法在Meteor中使用这个有用的ObjectId()
方法!
我在这里做错了什么?
答案 0 :(得分:0)
您是否将这些项目直接插入mongo shell,或者从另一个数据库中mongorestore
将它们插入?默认情况下,Meteor使用_id
s的字符串(尽管可以通过在声明Collection时将idGeneration
选项设置为"MONGO"
来更改,as discussed here)单独MongoDB使用ObjectIds,这就是你在这里得到的。
简而言之,您需要create a new ObjectID
object并根据此搜索,如果这是_id
所在的格式:
Chats.findOne({ _id: new Meteor.Collection.ObjectID(chat_id), members: this.userId });