चूंकि निकालें कोई क्वेरी शर्त नहीं है कि यह सभी दस्तावेज़ों से मेल खाएगी और एकत्रीकरण परिणाम पर ध्यान दिए बिना हटा दी जाएगी।
समाधान (वर्तमान कर्सर दस्तावेज़ की आईडी से मिलान करें):
db.getCollection("Collection")
.aggregate([
{
$match: { status: { $in: ["inserted", "done", "duplicated", "error"] } }
},
{
$project: {
yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$date" } }
}
},
{ $match: { yearMonthDay: { $eq: "2019-08-06" } } }
])
.forEach(function(doc) {
db.getCollection("Collection").remove({ "_id": doc._id });
});
एक और बेहतर समाधान डीबी के लिए सिंगल राउंड ट्रिप होना होगा, जबकि विलोपन को एकत्रीकरण से आईडी की एक सूची मिलती है cursor()
के माध्यम से cursor.map()
var idsList = db
.getCollection("Collection")
.aggregate([
{
$match: { status: { $in: ["inserted", "done", "duplicated", "error"] } }
},
{
$project: {
yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$date" } }
}
},
{ $match: { yearMonthDay: { $eq: "2019-08-06" } } }
])
.map(function(d) {
return d._id;
});
//now delete those documents via $in operator
db.getCollection("Collection").remove({ _id: { $in: idsList } });