Using $addFields to Add Sub Property to Root of Mongo Document
up vote
1
down vote
favorite
I am creating a Mongo view n order to hand the front-end client the data shapes as necessary. Originally I have a document that looks like this:
{
"_id" : <value>,
"region" : "Midwest",
"dob" : ISODate("1989-07-21T05:00:00.000+0000"),
"paymentOption" : {
"_id" : <value>,
"anotherProp" : <value>
"coverage" : {
"status" : "active",
"coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"),
"coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"),
},
}
}
... and what I want to do is take "coverage" from within "paymentOption" and put this on the root of the document with a property titled "coverage", and then afterwards, remove "paymentOption".
To do that I tried this:
$addFields: {
"coverage" : { "paymentOption.coverage" : {$exists: true} }
}
... but this produces an error:
Invalid $addFields specification: cannot use dotted field name
How would this operation need to change to produce this document?
{
"_id" : <value>,
"region" : "Midwest",
"dob" : ISODate("1989-07-21T05:00:00.000+0000"),
"coverage" : {
"status" : "active",
"coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"),
"coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"),
}
}
mongodb aggregation-framework
add a comment |
up vote
1
down vote
favorite
I am creating a Mongo view n order to hand the front-end client the data shapes as necessary. Originally I have a document that looks like this:
{
"_id" : <value>,
"region" : "Midwest",
"dob" : ISODate("1989-07-21T05:00:00.000+0000"),
"paymentOption" : {
"_id" : <value>,
"anotherProp" : <value>
"coverage" : {
"status" : "active",
"coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"),
"coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"),
},
}
}
... and what I want to do is take "coverage" from within "paymentOption" and put this on the root of the document with a property titled "coverage", and then afterwards, remove "paymentOption".
To do that I tried this:
$addFields: {
"coverage" : { "paymentOption.coverage" : {$exists: true} }
}
... but this produces an error:
Invalid $addFields specification: cannot use dotted field name
How would this operation need to change to produce this document?
{
"_id" : <value>,
"region" : "Midwest",
"dob" : ISODate("1989-07-21T05:00:00.000+0000"),
"coverage" : {
"status" : "active",
"coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"),
"coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"),
}
}
mongodb aggregation-framework
1
It should be{ "$addFields": { "coverage": "$paymentOption.coverage" } }
– Anthony Winzlet
Nov 7 at 16:41
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I am creating a Mongo view n order to hand the front-end client the data shapes as necessary. Originally I have a document that looks like this:
{
"_id" : <value>,
"region" : "Midwest",
"dob" : ISODate("1989-07-21T05:00:00.000+0000"),
"paymentOption" : {
"_id" : <value>,
"anotherProp" : <value>
"coverage" : {
"status" : "active",
"coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"),
"coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"),
},
}
}
... and what I want to do is take "coverage" from within "paymentOption" and put this on the root of the document with a property titled "coverage", and then afterwards, remove "paymentOption".
To do that I tried this:
$addFields: {
"coverage" : { "paymentOption.coverage" : {$exists: true} }
}
... but this produces an error:
Invalid $addFields specification: cannot use dotted field name
How would this operation need to change to produce this document?
{
"_id" : <value>,
"region" : "Midwest",
"dob" : ISODate("1989-07-21T05:00:00.000+0000"),
"coverage" : {
"status" : "active",
"coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"),
"coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"),
}
}
mongodb aggregation-framework
I am creating a Mongo view n order to hand the front-end client the data shapes as necessary. Originally I have a document that looks like this:
{
"_id" : <value>,
"region" : "Midwest",
"dob" : ISODate("1989-07-21T05:00:00.000+0000"),
"paymentOption" : {
"_id" : <value>,
"anotherProp" : <value>
"coverage" : {
"status" : "active",
"coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"),
"coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"),
},
}
}
... and what I want to do is take "coverage" from within "paymentOption" and put this on the root of the document with a property titled "coverage", and then afterwards, remove "paymentOption".
To do that I tried this:
$addFields: {
"coverage" : { "paymentOption.coverage" : {$exists: true} }
}
... but this produces an error:
Invalid $addFields specification: cannot use dotted field name
How would this operation need to change to produce this document?
{
"_id" : <value>,
"region" : "Midwest",
"dob" : ISODate("1989-07-21T05:00:00.000+0000"),
"coverage" : {
"status" : "active",
"coverageEnd" : ISODate("2020-07-31T00:00:00.000+0000"),
"coverageStart" : ISODate("2018-08-01T00:00:00.000+0000"),
}
}
mongodb aggregation-framework
mongodb aggregation-framework
asked Nov 7 at 15:43
Muirik
1,8771329
1,8771329
1
It should be{ "$addFields": { "coverage": "$paymentOption.coverage" } }
– Anthony Winzlet
Nov 7 at 16:41
add a comment |
1
It should be{ "$addFields": { "coverage": "$paymentOption.coverage" } }
– Anthony Winzlet
Nov 7 at 16:41
1
1
It should be
{ "$addFields": { "coverage": "$paymentOption.coverage" } }
– Anthony Winzlet
Nov 7 at 16:41
It should be
{ "$addFields": { "coverage": "$paymentOption.coverage" } }
– Anthony Winzlet
Nov 7 at 16:41
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
This will do it for you:
db.collection.aggregate([
{
$addFields: {
"coverage": "$paymentOption.coverage"
}
},
{
$project: {
paymentOption: 0
}
}
])
You can see it working here
You ware missing the $
operator since you are trying to access the paymentOption
fields.
Perfect. Thanks, @Akrion.
– Muirik
Nov 7 at 17:25
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
This will do it for you:
db.collection.aggregate([
{
$addFields: {
"coverage": "$paymentOption.coverage"
}
},
{
$project: {
paymentOption: 0
}
}
])
You can see it working here
You ware missing the $
operator since you are trying to access the paymentOption
fields.
Perfect. Thanks, @Akrion.
– Muirik
Nov 7 at 17:25
add a comment |
up vote
1
down vote
accepted
This will do it for you:
db.collection.aggregate([
{
$addFields: {
"coverage": "$paymentOption.coverage"
}
},
{
$project: {
paymentOption: 0
}
}
])
You can see it working here
You ware missing the $
operator since you are trying to access the paymentOption
fields.
Perfect. Thanks, @Akrion.
– Muirik
Nov 7 at 17:25
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
This will do it for you:
db.collection.aggregate([
{
$addFields: {
"coverage": "$paymentOption.coverage"
}
},
{
$project: {
paymentOption: 0
}
}
])
You can see it working here
You ware missing the $
operator since you are trying to access the paymentOption
fields.
This will do it for you:
db.collection.aggregate([
{
$addFields: {
"coverage": "$paymentOption.coverage"
}
},
{
$project: {
paymentOption: 0
}
}
])
You can see it working here
You ware missing the $
operator since you are trying to access the paymentOption
fields.
answered Nov 7 at 17:09
Akrion
7,14611222
7,14611222
Perfect. Thanks, @Akrion.
– Muirik
Nov 7 at 17:25
add a comment |
Perfect. Thanks, @Akrion.
– Muirik
Nov 7 at 17:25
Perfect. Thanks, @Akrion.
– Muirik
Nov 7 at 17:25
Perfect. Thanks, @Akrion.
– Muirik
Nov 7 at 17:25
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53192850%2fusing-addfields-to-add-sub-property-to-root-of-mongo-document%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
It should be
{ "$addFields": { "coverage": "$paymentOption.coverage" } }
– Anthony Winzlet
Nov 7 at 16:41