Php 如何在MongoDB中按键删除特定的转租
如何按键删除数组元素 文档似乎表明这就像按名称识别密钥一样简单,但这似乎不起作用 例如,使用下面的images数组和一个键Php 如何在MongoDB中按键删除特定的转租,php,mongodb,Php,Mongodb,如何按键删除数组元素 文档似乎表明这就像按名称识别密钥一样简单,但这似乎不起作用 例如,使用下面的images数组和一个键59db1c3654819952005897,我无法删除元素(下面的代码不会产生错误,但不会删除任何内容): 以下是数据结构: "_id" : 34, "images": [ { "59db1c3654819952005897": { "name": "1024x1024.png", "size":
59db1c3654819952005897
,我无法删除元素(下面的代码不会产生错误,但不会删除任何内容):
以下是数据结构:
"_id" : 34,
"images": [
{
"59db1c3654819952005897": {
"name": "1024x1024.png",
"size": "19421",
"sort": 2
}
},
{
"59db1c3652cda581935479": {
"name": "200x200.png",
"size": "52100",
"sort": 3
}
}
]
您遇到的问题是,您的
pull
查询正在查找images
的值等于59db1c3654819952005897
的文档,而在您的情况下,这不是真的
即使尝试使用指定的参数执行find
查询,也不会返回任何结果:
db.getCollection('collection').find({
'images': '59db1c3654819952005897'
});
要解决此问题,必须找到一个能够检索文档的查询,如下所示:
db.getCollection('collection').find({
'images': {
'59db1c3654819952005897': {
'$exists': true
}
}
});
现在要更新您的$pull
查询:
db.getCollection('collection').updateOne({'_id': 34}, {
'$pull': {
'images': {
'59db1c3654819952005897': {
'$exists': true
}
}
}
});
因此,在PHP中,它将是:
$id = '59db1c3654819952005897';
updateOne(['_id' => 34], ['$pull' => [
'images' => [
$id => [
'$exists' => true
]
]
]]);
换句话说,如果文档中存在
\u id
值34
的文档,那么它将引入图像
数组59db1c3654819952005897
。。。虽然这是奇怪的,给一个关键,你也必须添加“如果它存在”谢谢!因为您将键
作为值进行比较!欢迎:)
$id = '59db1c3654819952005897';
updateOne(['_id' => 34], ['$pull' => [
'images' => [
$id => [
'$exists' => true
]
]
]]);