【问题标题】:How can i repeat MySQL's WHERE 1 query in MongoDB?如何在 MongoDB 中重复 MySQL 的 WHERE 1 查询?
【发布时间】:2012-10-12 22:42:05
【问题描述】:

我可以在 MySQL 中做到这一点:

WHERE 1 AND 1 AND 1

如何在 MongoDB 中重复它? MongoDB 的 WHERE 1 等价物是什么?

更新:

所以。我不知道如何选择最佳答案^^和扩展问题。正如@mark-hillick 注意到的那样——我正在寻找构建查询的最佳方式。 现在我用这种方式(express+mongoose):

//req.query - get/post object in Express

for (var q in req.query) {
  if (req.query[q]) { //simplified example
    query[q] = req.query[q];
  };
}

Collection.find(query)

你的建议?

【问题讨论】:

  • 对于更新:这取决于您希望以“简单”的方式构建查询的程度。这不适用于更复杂的结构,例如 $ors 和 $ands,因为您仍然需要完整地写出这些结构。您还直接从 POST/GET 获取查询元素吗?没有卫生?
  • 补充一点,因为我无法编辑我的原始评论:事实上,一个人可以使用该代码恶意注入 $or 和 $and 以更改查询的工作方式。

标签: mysql mongodb express mongoose


【解决方案1】:

有一个 SQL-MongoDB 映射图表here,您会发现它很有用。

当您想要执行与 MySQL 中的“WHERE”相同的操作时,它有大量示例说明您在 MongoDB 中所做的事情。例如 -

SELECT a,b FROM users WHERE age=33

db.users.find({age:33}, {a:1,b:1})

SELECT * FROM users WHERE a=1 and b=1

db.users.find({a:1,b:1})

【讨论】:

    【解决方案2】:

    MongoDB 是面向文档的数据库,MongoDB 中的文档由键值对组成。因此,在 MongoDB 中,您不能像在 MySql 中那样运行单值查询。假设您将数据保存在字段名称 a 中,MongoDB 中的类似查询可能如下:

    db.test.find({$and : [{a:1},{a:1}, {a:1}]});
    

    【讨论】:

      【解决方案3】:

      如果'您正在尝试构建查询子句,AND 在 Mongo 中是隐含的。因此,如果您有以下情况;

      db.col.find({name:"dave"})
      

      你可以再添加一个;

      db.col.find({name:"dave", age:33})
      

      等等。

      【讨论】:

      • 是的,我愿意。但是,我们正在寻找构建查询的最佳方式。现在我正在做this way
      • 是的。这对我来说看起来不错,假设你清理了你的输入(不要盲目地将请求参数传递给 Mongo)
      • 当然。这是简化的例子 =)
      • 那我想你有答案了!
      猜你喜欢
      • 1970-01-01
      • 2018-11-17
      • 2020-06-11
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 2010-10-05
      • 2017-03-06
      • 2018-08-06
      相关资源
      最近更新 更多