Mongoose / MongoDB查询.find()任何int> 0?

时间:2018-01-16 08:33:58

标签: javascript node.js string mongodb mongoose

所以我有一个像这样的mongoose架构。

var info = new mongoose.Schema(
{ '123': { available: { type: 'String' }, onOrder: { type: 'String' } },
  '456': { available: { type: 'String' }, onOrder: { type: 'String' } },
  '789': { available: { type: 'String' }, onOrder: { type: 'String' } }
});

我希望在>的可用字段中找到并编号。 0.在任何给定时间只会填充其中一些。如果不是某个整数,“空”字符串将始终填充数字值“0.00000000”。

我正在寻找一个查询,它将通过查找和字符串不是0.00000000或者可以将字符串转换为整数然后可以找到任何> 0

我觉得我第一次想到基于字符串查找它们在某种程度上是有点hacky而且我正在寻找一种更永久的方法从这样的数据库中检索数字。

我已经尝试用$ in来完成这项工作,但我无法让它工作。

1 个答案:

答案 0 :(得分:0)

您可以通过两种方式执行此操作:1。$regexp 2. $where

  1. $regexp
  2. 检查所有字符串内容是否为数字[0-9],并以非零或零或点开头,后跟0-9

    regexp将为/^[1-9][0-9]|[.0][1-9]/

    1. $where
    2. 使用parseFloat检查它是否大于零

      { $where: function() { return parseFloat(this[123].available) > 0 } }
      

      集合

        > db.info.find()
          { "_id" : ObjectId("5a5edabdfee4c182f509f3ea"), "123" : { "available" : "0.00000000", "onOrder" : { "type" : "xyz" } } }
          { "_id" : ObjectId("5a5edabdfee4c182f509f3eb"), "123" : { "available" : "0.00000010", "onOrder" : { "type" : "xyz" } } }
          { "_id" : ObjectId("5a5edabdfee4c182f509f3ec"), "123" : { "available" : "100000000", "onOrder" : { "type" : "xyz" } } }
          { "_id" : ObjectId("5a5edabdfee4c182f509f3ed"), "123" : { "available" : "abc", "onOrder" : { "type" : "xyz" } } }
          >
      

      使用$regexp

      查找
      > db.info.find( { "123.available" : /^[1-9][0-9]|[.0][1-9]/ } );
      { "_id" : ObjectId("5a5edabdfee4c182f509f3eb"), "123" : { "available" : "0.00000010", "onOrder" : { "type" : "xyz" } } }
      { "_id" : ObjectId("5a5edabdfee4c182f509f3ec"), "123" : { "available" : "100000000", "onOrder" : { "type" : "xyz" } } }
      > 
      

      使用$where

      查找
      > db.info.find( { $where: function() { return parseFloat(this[123].available) > 0 } } );
      { "_id" : ObjectId("5a5edabdfee4c182f509f3eb"), "123" : { "available" : "0.00000010", "onOrder" : { "type" : "xyz" } } }
      { "_id" : ObjectId("5a5edabdfee4c182f509f3ec"), "123" : { "available" : "100000000", "onOrder" : { "type" : "xyz" } } }
      > 
      >