我在名为Orders的数据库集合中插入了一些数据。我有一个名为numberofh
的字段。
但我的集合中的所有字段都是字符串类型。我连接到服务器上的mongo db shell,我想删除numberofh
小于5的所有订单。
db.orders.remove({numberofh:{$lt:20}})
不起作用,因为numberofh
是字符串,因此$lt
无效。
我可以通过其他方式执行此操作,例如sdb.orders.remove({parseInt(numberofh}:{$lt:20})
吗?
答案 0 :(得分:1)
我认为您需要迭代每个文档并在光标到达时转换每个值:
db.orders.find().forEach( function( doc ) {
// Extract the relevant value and convert to an int
var numberofh_int = parseInt( doc[ "numberofh" ], 10 );
// Perform conditionals on the value
if ( numberofh_int < 20 ){ // $lt:20
// Remove the document if it answers to the conditions
db.orders.remove( doc );
}
} );
答案 1 :(得分:1)
您无法将字符串与mongoDB中的数字进行比较。您必须先插入一个新字段,即numberofh
的数字表示。你必须做转换客户端。根据另一个字段的值创建字段是不可能的。
db.orders.find( {} ).forEach( function (x) {
x.numberofh_n = parseInt( x.numberofh, 10 );
db.orders.save( x );
});
之后,您可以通过新字段删除记录:
db.orders.remove( { numberofh_n: { $lt:20 } } )