0

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

1 Answer 1

1

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'.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.