如何更改mongodb集合中字段的类型

时间:2014-02-20 13:23:06

标签: mongodb shell database

我在名为Orders的数据库集合中插入了一些数据。我有一个名为numberofh的字段。

但我的集合中的所有字段都是字符串类型。我连接到服务器上的mongo db shell,我想删除numberofh小于5的所有订单。

db.orders.remove({numberofh:{$lt:20}})不起作用,因为numberofh是字符串,因此$lt无效。

我可以通过其他方式执行此操作,例如sdb.orders.remove({parseInt(numberofh}:{$lt:20})吗?

2 个答案:

答案 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 } } )