2015-12-10 2 views
0

Я запрашиваю массив строк в mongdb и не работает с операторами $ gt/$ lt, см. Ниже. «Процессор» массив третий элемент строки «12»запрос элемента массива массива mongodb

nms:PRIMARY> db.checkpoints.find({ "cpu.3": "12" }).limit(1) 
{ "_id" : ObjectId("5665ed5d601be0ed56d4ca0a"), "day" : "1", "hostname" : "WAL-VSX-02", "time" : "15:33:54", "con" : [ "75", "44", "10", "25997", "8895", "13788", "338", "20", "226" ], "cpu" : [ "0", "0", "0", "12", "0", "2", "0", "0", "0" ], "__v" : 0 } 
nms:PRIMARY> db.checkpoints.find({ "cpu.3": {$gte: 10}}) 
nms:PRIMARY> 
+1

Вы уверены, что хотите запросить определенный индекс массива? Это будет очень хрупкий код. –

ответ

1

Единственная причина, по которой вы не получаете какой-либо вывод, состоит в том, что «cpu» представляет собой массив строк. Вам нужно будет использовать $where оператор, который делает оценку JavaScript и не могут воспользоваться индексами, как указано в documentation.

db.checkpoints.find({ "$where": function() { 
    return parseFloat(this.cpu[3]) >= 10; 
}}) 

Я предлагаю вам изменить структуру документа и преобразовывать элементы «CPU» плавать ,

1

Вы сохраняете значения cpu массива в виде строк, но вы сравниваете против целого. Если вы измените массив на значения int, ваш запрос будет работать.

Смежные вопросы