2016-05-19 7 views
0

現在、私はMongoDBデータベースの要素を並べ替えることができる小さなJavascriptアプリケーションを作成しています。データベース内のすべてのエントリには、その位置を表す「順序」というフィールドがあります。MongoDB/Node.js:異なるオブジェクト間のフィールドの入れ替え

"up"に移動するdbのエントリを選択すると、 "order - 1"の位置を持つ理論的に隣接する要素の間で "order"フィールドを交換したいと思います。ここで

collection.find({ "name": request.body.itemToMove }).toArray(function(err,doc) { 
ordernum = doc[0].order; 
}); 

私はMongoDBの要素から順にフィールドをつかんだ:ここで

は、私がこれまで持っているコードです。 ordernum-1というデータベースエントリを参照する必要があります。これは、リスト内で上に移動したいエントリの上に位置するエントリです。

明らかに、私がdoc [0] .orderを使用して取得したオブジェクトは、データ型ではありません。私は数学演算子を使用して作業することができます。

swapIndex = ordernum - 1 

しかし

console.log(ordernum); 

がコンソールに番号を印刷し、動作しません。また、オブジェクト自体を使用してデータベースにクエリを実行するだけで、クエリが失敗することもあります。

collection.find({ "order": ordernum }).toArray(function(err,doc) { 
//Do something 
}); 

これも失敗します。 「注文」フィールドを交換する方法を考え出す方法はありますか?

答えて

0

私はあなたがもっと一般的なアプローチを使うことができるときにこれを特に解決しようとしていると思います。

は、あなたが位置5から注意

db.items.update({"position": {"$gte": 3, "$lt": 5}}, {"$inc": 1}) 
// we now have 1, 2, 4, 5, 5, 6 
db.items.update({"name": request.body.itemToMove}, {"$set": {"position": 3}) 
// and now it is 1, 2, 3, 4, 5 with the old 5 at 3 

3にアイテムを移動していると言う:私はそれらの2つの行をテストしていない、私の頭のouttaそれらを書きました。

関連する問題