所以我有一个像这样的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来完成这项工作,但我无法让它工作。
答案 0 :(得分:0)
您可以通过两种方式执行此操作:1。$regexp
2. $where
$regexp
检查所有字符串内容是否为数字[0-9],并以非零或零或点开头,后跟0-9
regexp将为/^[1-9][0-9]|[.0][1-9]/
$where
使用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" } } }
>
>