2015-11-05 63 views
1

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

是否可以指定仅返回第一次出现,以便始终将模型作为响应而不是数组?

例如如果存在具有指定电子邮件的记录,则返回该记录并且不返回其他记录,如果有,匹配profile.id

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

所有这些榛子都是关于LinkedIn战略,它永远不会返回一封电子邮件(至少对我来说),但我必须迎合可能会返回电子邮件的情况。所以我构建我的查询取决于电子邮件的存在,如果它存在,查询是与$or运算符。但我想避免检查响应是一个对象还是一个数组,然后对数组值执行附加操作来确定要使用哪个值。

回答

1

根据蒙戈DB

findOne()

的文档总是不管返回它找到的匹配的一个文件。 而关于检索顺序,它总是会返回除加盖集合外的第一个匹配,它将文档插入顺序保存到集合中。

有关findOne更详细的说明请参阅文档如以下URL

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

+0

你是对的。我错误地用find代替findOne。 – user2814599

0

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

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

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

+0

扩展在此提到:使用'.find即使当()',多个结果表明重复的用户,与属性同一个用户在两个不同的文档中。除了我在这里丢失一些东西... –