我有以下收藏
{
"_id" : ObjectId("5d7e6c54c23c210001108556"),
“parentId" : "5d0162ba69cf130001a16115",
"tasks" : [
{
"_id" : "ae60a8f1",
"taskMetaDataIds” : [
ObjectId("5d55a648e2f7320001e578ac")
],
"name" : “meta 3"
},
{
"_id" : "07544d96",
"taskMetaDataIds" : [
ObjectId("5d55a648e2f732676676676”),
ObjectId("5d55a648e2612333556888”)
],
"name" : “meta 2"
},
],
"name" : “New Topic",
"createdBy" : "01526151-8303-450f-b08b-b36a1760b774",
"createdDate" : ISODate("2019-09-15T16:52:36.150 0000"),
"updatedDate" : ISODate("2019-09-15T16:52:36.150 0000")
}
我正在尋找以下輸出。是否有一個運算子可以直接將物件陣列轉換為字串陣列,如下所示。我可以通過回圈遍歷 taskMetaDataIds 陣列來使用腳本來完成,但我希望使用適合我目的的直接 mongo 運算子。
{
"_id" : ObjectId("5d7e6c54c23c210001108556"),
“parentId" : "5d0162ba69cf130001a16115",
"tasks" : [
{
"_id" : "ae60a8f1",
"taskMetaDataIds” : [
"5d55a648e2f7320001e578ac"
],
"name" : “meta 3"
},
{
"_id" : "07544d96",
"taskMetaDataIds" : [
"5d55a648e2f732676676676”,
“5d55a648e2612333556888”
],
"name" : “meta 2"
},
],
"name" : “New Topic",
"createdBy" : "01526151-8303-450f-b08b-b36a1760b774",
"createdDate" : ISODate("2019-09-15T16:52:36.150 0000"),
"updatedDate" : ISODate("2019-09-15T16:52:36.150 0000")
}
我在下面嘗試過,但似乎不起作用-
db.getCollection("data").updateOne({"_id":ObjectId("5d7e6c54c23c210001108556")}, [{ $set: { "tasks.taskMetaDataIds": "$tasks.taskMetaDataIds.str" } }])
uj5u.com熱心網友回復:
$set- 設定tasks陣列欄位。1.1。
$map- 迭代tasks陣列中的每個元素并回傳一個新陣列。1.1.1。
$mergeObjects- 合并當前迭代task物件和taskMetaDataIds陣列(來自結果1.1.1.1)。1.1.1.1。
$map- 迭代當前被迭代task物件的taskMetaDataIds陣列并回傳一個新陣列。1.1.1.1.1。
$toString- 將每個迭代 id 從ObjectId型別轉換為string型別。
db.getCollection("data").updateOne({
"_id": ObjectId("5d7e6c54c23c210001108556")
},
[
{
$set: {
"tasks": {
$map: {
input: "$tasks",
as: "task",
in: {
$mergeObjects: [
"$$task",
{
"taskMetaDataIds": {
$map: {
input: "$$task.taskMetaDataIds",
in: {
$toString: "$$this"
}
}
}
}
]
}
}
}
}
}
])
演示@Mongo Playground
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527086.html
