【问题标题】:Check if value exists in a mongodb array检查值是否存在于 mongodb 数组中
【发布时间】:2016-10-22 21:58:44
【问题描述】:

如何检查当前Meteor.user()._id 是否存在于"favoritedBy" 数组中?

如果为真,则打印"Your favorite",如果为假,则打印"Not your favorite"

MongoDB 中的文档:

{
  "_id" : "W5WwAZatorDEb6DNP",
  "createdBy" : "aTmb64zNGSyeDYFJZ",
  "favoritedBy" : [ 
      "X594baqWYZiJqA3Qg",
      "fgk234m2dkD229d12"
  ]
}

假设Meteor.user()._id 返回X594baqWYZiJqA3Qg

如何对此进行真/假检查?

我尝试了以下方法:

isFavorite: function() {
    var user = Meteor.user()._id;
    return Posts.find({favoritedBy: user});
 }

在模板中:

{{#if isFavorite}}
    Your favorite
{{else}}
    Not your favorite
{{/if}}

但它似乎不起作用,因为它总是返回 "Your favorite",即使当前 Meteor 用户 ID 不在数组中。

有什么想法吗?

【问题讨论】:

  • 你的实现总是返回"Your favorite"的原因是因为isFavorite方法总是返回一个游标。此游标不会立即访问数据库或返回文档,除非您立即调用 fetch() 方法,该方法将所有匹配的文档作为数组返回或 count() 方法返回与查询匹配的文档数。

标签: javascript arrays mongodb meteor mongodb-query


【解决方案1】:

你可以使用

isFavorite: function() {
    var user = Meteor.user()._id;
    return Posts.find({favoritedBy: user}).count() > 0 ? true : false;
 }

count() 将返回与 find() 查询匹配的文档数,然后检查其是否为 > 0,并使用 ternary operator,如果是,则返回 true,否则返回 @987654327 @

【讨论】:

    猜你喜欢
    • 2016-09-09
    • 2019-08-02
    • 1970-01-01
    • 2021-08-24
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多