我下面有收藏
{
"_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" } }])
1条答案
按热度按时间fkaflof61#
$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
类型。Demo @ Mongo Playground