1

私はmongodbの初心者です。

各店舗の最低価格を削除する必要があります。

ドキュメント (製品):

入力:

product_id|store_id|price|color|
--------------------------------
1         |   1    | 10  |red
2         |   1    | 9   |blue
3         |   1    | 12  |red
4         |   2    | 19  |red
5         |   2    | 20  |red
6         |   2    | -1  |red
7         |   6    | 30  |red
8         |   6    | 10  |blue

出力:

product_id|store_id|price|color|
--------------------------------
2         |   1    | 9   |blue
3         |   1    | 12  |red
4         |   2    | 19  |red
5         |   2    | 20  |red
8         |   6    | 10  |blue

このコードを my.js に記述します

use stores;
var products=db.products.distinct('product_id');
for(i=0; i<products.length; i++){
   db.products.remove({product_id:i,color:'red'}).sort({price:1}).limit(1);
}

しかし、私のコードは機能しません。より良いコードを書くか、私の間違いを示してください/

ありがとう

4

4 に答える 4

3

あなたは試してみたいかもしれません:

// this returns an array of documents which has the store_id and the minimum price for that store
myresult = db.products.aggregate( [ 
                            { $group: 
                                 { _id: "$store_id", 
                                   price: { $min: "$price" } 
                                 } 
                            } 
                            ] ).result

// loop through the results to remove the documents matching the the store id and price

for (i in myresult) { 
    db.products.remove( 
         { store_id: myresult[i]._id, price: myresult[i].price } 
    ); 
}
于 2012-11-08T22:46:42.103 に答える
2

私にはあなたのコードは問題ないようです。store_id で検索して、色に基づいて最低価格の製品を削除したいのは不思議です。

mongodb findAndModify()には、デフォルトで単一のドキュメントを見つけて変更する直接的な方法があります。

http://docs.mongodb.org/manual/reference/method/db.collection.findAndModify/#findandmodify-wrapper-sorted-remove

var products=db.products.distinct('store_id');
products.forEach(function(storeId, i){
    db.products.findAndModify({
        query: { "store_id":storeId, "color": "red" }, 
        sort: { price:  1 }, 
        remove: true});
});
于 2014-09-20T20:04:32.473 に答える
2

あなたのコードはほとんど正しいですが、いくつかの変更が必要です:

use stores;
var products = db.products.distinct('product_id');
products.forEach(function(i, v){
    var id = db.products.find({product_id: v, color: "red"}).sort({price: 1}).limit(1).toArray()[0];
    db.products.remove({_id: id._id}); 
});
于 2014-09-20T14:26:17.273 に答える
0

この回答は、「mongodb で最小値を削除する方法は?」と検索する人向けです。

var myresult = db.mycol.aggregate
([{
    $group:
    {
       _id:"",
       agevalue: { $min: "$age" }
    }
   
}]);
db.mycol.remove( {"age": myresult._batch[0].agevalue})

に列名を割り当てることができます_id。次に、クエリはその列に従って結果をグループ化します。次に、各グループに複数の最小値を設定できます。

于 2017-03-08T14:09:27.293 に答える