[英]Remove one field from mongoDB collection
我有一個 mongoDB 集合,與 mongoose Schema 一起使用:
const balanceSchema = new mongoose.Schema({
userId: {
type: mongoose.Schema.Types.ObjectId, ref: 'user'
},
incomes: { Number },
fees: { Number },
},
{ strict: false })
我使用嚴格模式為 false,因此我可以使用它的值推送我想要的任何“鍵”。
我只想刪除“收入”類別之一,但我無法指定該行,因為沒有“定義的鍵”。 以下是其中的數據示例:
{
"_id": {
"$oid": "60c763df3d260204865d2069"
},
"incomes": {
"income1": 1300,
"anyKeyNameIWant": 400
},
"fees": {
"charge1": 29,
"charge2": 29,
"chargetest": 29,
"charge7": 29
},
"__v": 0,
}
我試過這個,但沒有成功:
module.exports.deleteOneBalance = (req, res) => {
let data = req.body
if (!ObjectID.isValid(req.params.id))
return res.status(400).send('ID unknown : ' + req.params.id);
BalanceModel.update(
{ _id: req.params.id },
{
$unset: { "incomes.salairetest": "400" }
}), (err, docs) => {
if (!err) res.send('Deleted. ' + data)
else console.log('Error : ' + err)
}
}
任何的想法 ?
如果要從文檔中刪除/取消設置特定值,則必須提供該鍵的完整路徑。
如果你想刪除讓我們舉個例子anyKeyNameIWant
那么你的路徑將是incomes.anyKeyNameIWant
和更新查詢會是這樣
db.sample.update(
{
_id: ObjectId("60c763df3d260204865d2069")},
{
$unset: {"incomes.anyKeyNameIWant":""}
})
在您的代碼中,您正在傳遞一個在$unset
具有關鍵incomes
的對象,這將從文檔中刪除完整的incomes
關鍵
這是官方文檔的鏈接,以防您需要更多詳細信息$unset
有多種方法可以刪除具有動態字段名稱的字段。
一種解決方案是這樣的:
var unset = {};
unset["incomes." + "anyKeyNameIWant"] = null;
db.balanceModel.updateOne({ _id: req.params.id }, { $unset: unset })
或者您可以使用這樣的聚合管道:
db.balanceModel.updateOne(
{ _id: req.params.id },
[
{ $set: { incomes: { $objectToArray: "$incomes" } } },
{ $set: { incomes: { $filter: { input: "$incomes", cond: { $ne: ["$$this.k", "anyKeyNameIWant"] } } } } },
{ $set: { incomes: { $arrayToObject: "$incomes" } } }
]
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.