2016-05-11 6 views
0

I持つ二つのコレクション Vitamin_Fruitsや果物のコレクションモンゴDBクエリ

vitamin_fruitsコレクション:

{ 
"_id" : ObjectId("560bf00895977916c17869ff1"), 
fruit_name:"apple", 
"vitamin":"vitamin E", 

} 

{ 
"_id" : ObjectId("560bf00895977916c17869fgg3"), 
fruit_name:"orange", 
"vitamin":"vitamin C", 

} 

果物のコレクション:

{ 

"_id" : ObjectId("54d8ced69d1ecc14dc8fb658") 
fruit_name:"orange", 
vitamins:["vitamin C","vitamin D"], 
fruit_edible:true, 
has_seeds:true 

} 
{ 

"_id" : ObjectId("54d8ced69d1ecc14895b6c2") 
fruit_name:"apple", 
vitamins:["vitamin C","vitamin E"], 
fruit_edible:true, 
has_seeds:true 

} 

私はvitamin_fruitコレクションからエントリを削除したいです果物の名前がリンゴの場合、果物の収集にビタミンのフルーツコレクションのビタミンが含まれている場合

私はループせずにこれを行う簡単な方法はあり

var a= db.fruits.find({fruit_name:"apple"},{_id:0,vitamins:1}) 

db.vitamin_fruits.find({fruit_name:"apple"} 
,{ _id:0,"vitamin" :1}).forEach(function(c){if(a.indexOf(c) >-1) {  
db.vitamin_fruits.remove({vitamin:c})} 
}) 

答えて

1

のようなものを試してみました。

var a = db.fruits.distinct('vitamins', {fruit_name: "apple"}); 
db.vitamin_fruits.remove({fruit_name: "apple", vitamin:{$in: a}}) 

最初のクエリは、果物名が「apple」であるビタミンが別々の配列を返します。 2番目のクエリは、fruit_nameが 'apple'で、ビタミンが配列 'a'に属しているvitamin_fruitsからドキュメントを削除します。