【问题标题】:Mongodb. How to get boolean value representing existance of id in an array of ids?蒙古数据库。如何获取表示 id 数组中是否存在 id 的布尔值?
【发布时间】:2013-09-06 17:04:21
【问题描述】:

我有一个有属性的模型

_idUserReadArr //  array of users who have read an article

这将是一个巨大的数组。

我希望我的 API 返回一个布尔值

isRead

如果_idUserReadArr 包含特定的 id,则应该为 true,否则为 false。

所以,而不是

_idUserArr = [1, 2, 3]

我想获得isRead = trueisRead = false 并且不返回或直接使用大_idUserReadArr 数组进行一些操作。

我正在使用 mongoose 处理 node.js。

【问题讨论】:

  • 您可以使用model.find({_id: articleId, _idUserReadArr: myUserId}, {_id: true}).count().exec(function(err, num) {}) 之类的查询,而numtruthy/falsey 值(如果未找到,则为0,如果找到,则为1)。这有帮助吗,还是我误解了你的问题?

标签: node.js api mongodb mongoose


【解决方案1】:

不使用聚合框架,您无法更改输出的性质,但使用简单的包装器,您可以非常接近。在这种情况下,确实没有必要使用聚合框架,因为这种解决方案既简单又高效。

当您指定所需的find 时,只需将结果限制为单个字段(如_id)。

http://mongoosejs.com/docs/api.html#model_Model.find

myModel.find({ ... condition ... }, "_id", function(err, docs) {
   // the existence of the doc means your condition was true
   // without sending back the entire document/array structure
});

findOne 也具有相同的 functionality(与 Mongoose 中的其他几个 findXYZ 函数一样)。

MongoDB 对投影的本机支持支持此功能,如文档 here 所述。

【讨论】:

  • 谢谢。我正在朝那个方向思考,但如果我想从 db.xml 获取有关 100 个项目的信息,那将不会有效率。其中一些可能会被具体用户阅读,而其中一些可能不会。除了 _idUserReadArr 之外还有一些字段,所以我正在寻找一个通用的解决方案。
  • 什么是“通用”解决方案?您可以改为使用 -fieldname 排除字段。我认为您正在寻找 MongoDB 中不存在的东西。
猜你喜欢
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 2011-03-10
  • 2012-01-09
  • 1970-01-01
  • 2014-10-19
  • 2011-09-10
  • 2021-11-06
相关资源
最近更新 更多