Mithun
Mithun

Reputation: 153

Mongo DB queries using join

I have two collection Vitamin_Fruits and Fruits collection

vitamin_fruits collection :

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

}

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

}

fruits collection:

{

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

}

I want to remove an entry from vitamin_fruit collection if the vitamin in vitamin_fruits collection is present in fruits collection if the fruit_name is apple

I tried something like

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

Upvotes: 0

Views: 89

Answers (1)

Sarath Nair
Sarath Nair

Reputation: 2868

There's an easy way to do this without looping.

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

The first query will return an array with distinct vitamins having fruit_name as 'apple'. The second query will remove documents from vitamin_fruits where fruit_name is 'apple' and vitamin belongs to the array 'a'.

Upvotes: 1

Related Questions