Javascript meteor应用程序:如何从客户端的集合中正确检索单个文档
在我的meteor应用程序中,我将客户端的唯一id字符串存储在一个名为UserNavigationTracker的集合中:Javascript meteor应用程序:如何从客户端的集合中正确检索单个文档,javascript,meteor,Javascript,Meteor,在我的meteor应用程序中,我将客户端的唯一id字符串存储在一个名为UserNavigationTracker的集合中: { "clientId" : "xxNfxxPGi7tqTbxc4", "currentWizard" : "IntroductionWizard", "currentStep" : "Step-1", "_id" : "ifBJ688upEMfzzviC" } 作为应用程序初始化的一部分,我需要检查并查看有关我的客户端的信息是否已存储在数
{
"clientId" : "xxNfxxPGi7tqTbxc4",
"currentWizard" : "IntroductionWizard",
"currentStep" : "Step-1",
"_id" : "ifBJ688upEMfzzviC"
}
作为应用程序初始化的一部分,我需要检查并查看有关我的客户端的信息是否已存储在数据库中。
我正在努力从收藏中找回这张唱片。
以下是我正在做的:
var clientIdInDatabase = UserNavigationTrackerCollection.find({"clientId": "xxNfxxPGi7tqTbxc4"});
console.log('clientIdInDatabase: ' + clientIdInDatabase);
此操作的浏览器控制台输出为:clientIdInDatabase:[对象]
Mt问题是:如何从这个返回的对象中获取clientId字段的实际值?
find
返回一个游标,只需将其替换为findOne
即可获取单个对象(或未定义)。如果要获取多个文档,可以使用find(…).fetch()
获取它们的数组。您可以在文档中阅读所有这些功能的文档
根据我们的讨论,这可能对客户起到补偿订阅延迟的作用:
Tracker.autorun(function() {
var clientId = Session.get('clientId');
var unt = UserNavigationTrackerCollection.findOne({clientId: clientId});
Session.set('isClientIdInDatabase', unt != null);
});
注意:这假设
clientId
和isclientindatabase
存储在会话变量中。当我使用findOne时,我得到的是未定义的对象,而不是对象。如果使用findOne
得到的是未定义的对象,则表示找不到您要查找的对象。检查选择器,并检查数据库本身的内容。如果您在开发模式(默认)下运行,您可以在命令行上执行:$meteor mongo
以访问本地meteor db shell。这非常奇怪-当我从浏览器控制台发出命令UserNavigationTrackerCollection.findOne()时-我得到了预期的结果。我的应用程序中完全相同的语法在客户端上运行时返回Unfinedis?如果是这样,那么您的查找可能只是在数据到达minimongo之前执行的。是的,这是在客户端上运行的。服务器上唯一的代码是UserNavigationTrackerCollection的定义。我应该在别的地方叫“find()”吗?