2016-12-14 69 views
2

我苦苦寻找执行一种化合物的MongoDB find()以下标准的一个好方法返回一个文件:根据搜索条件MongoDB的:如果另一个不存在

  • 查询将匹配一个文件
  • 如果找到匹配项,该文件将被退回
  • 如果找不到匹配项,则将返回其他文件。这第二个文档将匹配另一组标准
  • 该查询理想情况下会返回一个记录,无论如何。

在我的特殊情况下,我收集了一个users,其中包含用户列表及其关联的权限。它还包含一个包含默认权限的guest伪用户的特殊条目。这个guest文档是在没有发生确切的用户匹配时需要返回的文档。

我已经尝试过使用{$or: [ { id: "bob" }, {id: "guest" } ]}以及{ id: { $in: [ "bob", "guest" ] } },但是这两个搜索按顺序收集,并且将返回“bob”或“guest”,具体取决于先插入哪一个。

有没有办法明确说找到bob或作为后备,返回guest文件?

请记住,这将从Node.js执行,因此我正在寻找一个干净的&简单的方法将其卸载到MongoDB。

我意识到这可以做为两个查询,但我想尽可能避免这种情况。

谢谢!

回答

0

如果您插入guest作为第一个对象,那么通过组合limitsort by _id您可以解决这个问题!

0

我认为,而不是使用find({}),你可以使用聚合,并在$ in和$ cond操作符可以解决您的问题。 您可以参考这个链路> https://docs.mongodb.com/v3.2/reference/operator/aggregation/cond/

+0

嗯,我不知道'$ cond'存在。这可能只是做到了,尽管最终的结果会很长。我不知道是否有一种替代方式没有聚合... – mstubbies

相关问题