2016-05-11 13 views
0

Ich habe zwei Sammlung Vitamin_Fruits und Obst SammlungMongo DB Join-Abfragen mit

vitamin_fruits Sammlung:

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

} 

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

} 

Früchte Sammlung:

{ 

"_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 

} 

Ich möchte einen Eintrag aus vitamin_fruit Sammlung entfernen wenn das Vitamin in der vitamin_fruits Sammlung in der Fruchtsammlung vorhanden ist, wenn der fruit_name Apfel ist

habe ich versucht, so etwas wie

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

Antwort

1

Es gibt eine einfache Möglichkeit, dies zu tun, ohne Looping.

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

Die erste Abfrage wird ein Array mit unterschiedlichen Vitamine mit fruit_name als ‚Apfel‘ zurückzukehren. Die zweite Abfrage entfernt Dokumente aus vitamin_fruits, wobei fruit_name "Apfel" ist und Vitamin zum Array "a" gehört.