2015-10-14 198 views
-2

我在调用方法''newDiscussion'的用户页面上有一个表单,用于在登录的用户(以下称为user1)和用户的页面之间创建新的讨论对象'继续(以下简称:用户2)。它还创建了一个带有与新创建的讨论对象相匹配的discussionId的消息对象。如何检查集合中是否存在字段值

在讨论对象中,我存储了user1._id和user2._id。

我想检查一个现有的讨论对象是否包含这两个用户ID。如果为false,则按上述步骤操作,否则只需插入消息并使discussionId与现有讨论对象Id相匹配。

+0

你怎么样UPSERT的讨论? –

+0

我需要先找到讨论 - 这是停止创建另一个已经有两个用户ID的讨论。 – JRedford

+0

没有任何代码,不可能提供任何真正的帮助。理论上,创建一个变量来进行讨论,解析现有的讨论对象并寻找这2个ID。如果你发现它们,然后填充你刚刚做出的讨论var并退出循环。循环之后,如果讨论对象未定义,则将其实例化为讨论对象。 – Archer

回答

0

假设你已经在讨论发布到你的客户,你可以使用collection.findOne方法在客户端代码这样

var dicussion = Discussions.findOne({'user1._id': Meteor.userId(), 'user2._id': 'another user id'}); 

if (discussion) { 
    // do some updates, if necessary 
} 
else { 
    // else create a new discussion 
} 
+0

是否findOne返回true/false或找到的文档对象?我正在使用你的代码,并且发生了一些奇怪的事情,if和else语句都正在执行。为了让事情变得简单,我试图弄清楚这一点,if语句是console.log('Discussion exists')和其他console.log('没有讨论')。但是,当我调用这个方法(这是服务器端代码)时,if语句输出到Meteor控制台日志,else语句输出到浏览器控制台。这里是整个Meteor.methods代码 - [链接](https://jsfiddle.net/xLue5xqt/) - 感谢您的帮助,同时我学习! – JRedford

+0

首先要注意的是,客户正试图对您的方法进行乐观的运行。这可能是因为您在共享位置定义了您的方法(意味着它对服务器和客户端均可见)。客户端乐观地运行该方法,但仍会等待来自服务器的响应。在你的情况下,客户端的minimongo中没有讨论文档(我们需要使用pub/sub来解决这个问题),但服务器总是可以访问讨论集合。现在,我们需要讨论你想要返回到浏览器的内容(例如文档或布尔型) –

+0

如果你想返回文档,你应该使用发布/订阅流星函数;否则,你可以返回true/false,客户端可以做出相应的响应。在做出决定时需要考虑以下事项......流星会执行唯一的用户名验证服务器端(使用Meteor.methods),并向客户端而不是用户文档返回true/false值。这是首选,因为他们不想将用户文档公开给客户端。 –

相关问题