MongoDB $gt/$lt operators with prices stored as strings

后端 未结 5 1306
一生所求
一生所求 2020-11-29 06:27

I\'m trying to query my database for prices greater than/less than a user specified number. In my database, prices are stored like so:

{price: \"300.00\"}
         


        
5条回答
  •  难免孤独
    2020-11-29 07:07

    $gt is an operator that can work on any type:

    db.so.drop();
    db.so.insert( { name: "Derick" } );
    db.so.insert( { name: "Jayz" } );
    db.so.find( { name: { $gt: "Fred" } } );
    

    Returns:

    { "_id" : ObjectId("51ffbe6c16473d7b84172d58"), "name" : "Jayz" }
    

    If you want to compare against a number with $gt or $lt, then the value in your document also needs to be a number. Types in MongoDB are strict and do not auto-convert like they f.e. would do in PHP. In order to solve your issue, make sure you store the prices as numbers (floats or ints):

    db.so.drop();
    db.so.insert( { price: 50.40 } );
    db.so.insert( { price: 29.99 } );
    db.so.find( { price: { $gt: 30 } } );
    

    Returns:

    { "_id" : ObjectId("51ffbf2016473d7b84172d5b"), "price" : 50.4 }
    

提交回复
热议问题