Reputation: 153
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
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