[英]How delete one row from an array in mongoDB collection
我有一個查詢集合,它的結構是這樣的
{
"_id": "5e71fa3ab004192b349e4a06",
"QUERIES": [
{
"_id": "5e71fa3ab004192b349e4a07",
"QUERY": "1",
"USER_ID": "5e6f1c5b8451307f782d0994",
"USER_NAME": "a1",
"createdAt": "2020-03-18T10:38:50.247Z"
},
{
"_id": "5e71fa46b004192b349e4a08",
"QUERY": "2",
"USER_ID": "5e6f1c5b8451307f782d0994",
"USER_NAME": "a2",
"createdAt": "2020-03-18T10:39:02.451Z"
}
],
"TICKET_ID": "5e70f4fa47df9479502f7937",
"USER_ID": "5e6f1c5b8451307f782d0994",
"RESOLVED_DATE": "2020-03-07T00:00:00.000Z"
}
我想從 QUERIES 數組中刪除第一個元素。 預期產出
{
"_id": "5e71fa3ab004192b349e4a06",
"QUERIES": [
{
"_id": "5e71fa46b004192b349e4a08",
"QUERY": "2",
"USER_ID": "5e6f1c5b8451307f782d0994",
"USER_NAME": "a2",
"createdAt": "2020-03-18T10:39:02.451Z"
}
],
"TICKET_ID": "5e70f4fa47df9479502f7937",
"USER_ID": "5e6f1c5b8451307f782d0994",
"RESOLVED_DATE": "2020-03-07T00:00:00.000Z"
}
我嘗試使用以下更新方法,但在 mongoDB Shell 上執行更新方法時出錯
db.getCollection("query_masters").update( {'QUERIES._id':ObjectId('5e726996b96d107eac5c88a4')},{$pull: { 'QUERIES._id': ObjectId('5e726996b96d107eac5c88a4') }}
)
錯誤信息
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 28,
"errmsg" : "Cannot use the part (_id) of (QUERIES._id) to traverse the element"
})
-提前致謝
錯誤意味着您不能通過子文檔 id 來遍歷集合中的主文檔。 因此,為了避免它,您可以使用父文檔的 _id 進行遍歷。
試試這個查詢:
db
.getCollection("query_masters")
.update(
{
'_id':ObjectId('5e71fa3ab004192b349e4a06')
},
{
$pull: {
'QUERIES._id': ObjectId('5e726996b96d107eac5c88a4')
}
}
)
如果您仍想使用子文檔 ID 遍歷文檔,請嘗試以下操作:
db
.getCollection("query_masters")
.update(
{
"QUERIES": {
$elemMatch: {
_id: ObjectId('5e726996b96d107eac5c88a4')
}
}
},
{
$pull: {
'QUERIES._id': ObjectId('5e726996b96d107eac5c88a4')
}
}
)
首先,我將數據插入到名為Employee
集合中,然后將查詢編寫為:
db.Employee.update({'_id':("5e71fa3ab004192b349e4a06")},
{$pull:{"QUERIES": {USER_NAME:"a1"}}},false, true
);
布爾值是upsert
和multi
您可以在文檔中查看。 我只想建議您在QUERIES
array
上方的_id
處使用ObjectId
。
你的要求不是很清楚。
如果您想刪除第一個元素而不管內容如何,那么解決方案是
db.collection.updateMany(
{},
{ $unset: { "QUERIES.0": "" } }
)
如果數組中的位置不相關,則解決方案是以下之一:
db.collection.updateMany(
{},
{ $pull: { "QUERIES": { QUERY: "1" } } }
)
db.collection.updateMany(
{},
{ $pull: { "QUERIES": { USER_ID: ObjectId("5e6f1c5b8451307f782d0994") } } }
)
db.collection.updateMany(
{},
{ $pull: { "QUERIES": { _id: ObjectId("5e6f1c5b8451307f782d0994") } } }
)
db.collection.updateMany(
{},
{ $pull: { "QUERIES": { USER_NAME: "a1" } } }
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.