Mongodb Chats.findOne(id)不返回任何内容,但db.Chats.findOne(ObjectId(id))返回
在我的meteor应用程序中,我想根据聊天对象的成员发布聊天伙伴:基本上有两个成员,一个不是当前用户的是我想发布的成员。这是密码。成员是始终包含两个不同用户ID的列表Mongodb Chats.findOne(id)不返回任何内容,但db.Chats.findOne(ObjectId(id))返回,mongodb,collections,meteor,publish-subscribe,Mongodb,Collections,Meteor,Publish Subscribe,在我的meteor应用程序中,我想根据聊天对象的成员发布聊天伙伴:基本上有两个成员,一个不是当前用户的是我想发布的成员。这是密码。成员是始终包含两个不同用户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
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:是的,我的出版物在服务器文件夹中
我的问题是:我的第一行代码返回未定义的。但是如果我在mongo上输入db.chats.findOneObjectId,我会在输出中得到我的记录及其成员。问题是,似乎我不能在Meteor中使用这个有用的ObjectId方法
我做错了什么?您是直接将这些项目插入mongo shell,还是从另一个数据库中存储它们?默认情况下,Meteor使用字符串作为_ID,尽管在声明集合时可以通过将idGeneration选项设置为MONGO来更改,而独立MongoDB使用ObjectID,这就是您在这里看到的 长话短说,如果您的_id采用的是这种格式,那么您需要基于此进行搜索:
Chats.findOne({ _id: new Meteor.Collection.ObjectID(chat_id), members: this.userId });