MongoDB:带有$或条件的findOne

时间:2015-11-05 08:34:07

标签: mongodb mongodb-query

db.collection.findOne({$or: [{email: 'email@example.com'},{'linkedIn.id': 'profile.id'}]});这样的请求可能会返回一个包含两条记录的数组。

是否可以指定仅返回第一个匹配项,以便我始终将模型作为响应而不是数组?

例如如果有指定电子邮件的记录,请将其退回并且不返回与profile.id匹配的其他记录(如果有)?

另一个问题是,参数'email''linkedIn.id'的顺序是否重要。

所有这些榛子都是关于LinkedIn策略的,它永远不会返回一封电子邮件(至少对我而言),但我必须在它可能返回电子邮件的情况下迎合这种情况。因此,我根据电子邮件的存在构建我的查询,如果存在,则查询是$or运算符。但我想避免检查响应是对象还是数组,然后对数组值执行其他操作以确定要使用哪些值。

2 个答案:

答案 0 :(得分:1)

根据mongo DB的文档

  

<强> findOne()

始终返回单个文档,而不管它找到的匹配项。 并且关于检索的顺序,它将始终返回第一个匹配,除了上限集合,其保持文档插入到集合中的顺序。

有关findOne的更多详细说明,请参阅以下URL中提到的文档

https://docs.mongodb.org/manual/reference/method/db.collection.findOne/

答案 1 :(得分:0)

根据db.collection.findOne()的MongoDB文档:

  

返回一个满足指定查询条件的文档。如果多个文档满足查询,则此方法根据反映磁盘上文档顺序的自然顺序返回第一个文档。在上限集合中,自然顺序与插入顺序相同。如果没有文档满足查询,则该方法返回null。

您无法从db.collection.findOne()收到多条记录。您确定没有使用db.collection.find()吗?