Re: create new variables in aggregation?

From: Tim Arnold <jtim.arnold@xxxxxxxxx>
To: mongodb-user <mongodb-user@xxxxxxxxxxxxxxxx>
Date: Tue, 19 Apr 2016 07:49:34 -0700 (PDT)
Why ads?
Hi Chris,
Thank you very much--that is just what I needed. I will have to do more 
reading now to make sure I understand what's going on.

MongoChef is very cool too--thanks for the link.

--Tim


On Monday, April 18, 2016 at 3:35:47 AM UTC-4, Christoph Husse wrote:

Maybe something like this?

db.test.aggregate(
  [
    // Stage 1
    {
      $match: { 
        result: 1
      }
    },


    // Stage 2
    {
      $group: {
        _id: "$name",
        formats: { $addToSet: "$format"}
      } 
    },


    // Stage 3
    {
      $project: {
        name: "$name",
        pdf: {$setIsSubset: [["pdf"], "$formats"]},
        htm: {$setIsSubset: [["htm"], "$formats"]},
        xml: {$setIsSubset: [["xml"], "$formats"]}
      }
    }
  ]
);


You need the group because your context stretches over multiple documents. 
The last stage just translates from set representation to your final output 
format. And the first stage gets rid of all false results, which basically 
makes group only add true values to the set and as a side-effect also 
speeds up the group operator itself. I am sure there are other solutions.

Cheers
Chris

On Friday, April 15, 2016 at 6:58:15 PM UTC+2, Tim Arnold wrote:

I have a collection with documents like this (one fruit, one format, one 
result):

{name: 'apple', result: 1, format:'pdf'}
{name: 'apple', result: 0, format:'xml'}
{name: 'apple', result: 1, format:'htm'}
{name: 'pear', result: 0, format:'pdf'}
{name: 'pear', result: 1, format:'xml'}
{name: 'pear', result: 0, format:'htm'}

I want to transform it to these two documents (one fruit, three format 
variables, three result values):
{name: 'apple', pdf:1, xml:0, htm:1}
{name: 'pear', pdf:0, xml:1, htm:0}

Is this possible?
I am reading the doc on the aggregation pipeline but I'm not sure how/if 
it can be done.

thanks,
--Tim



-- 
You received this message because you are subscribed to the Google Groups "mongodb-user"
group.

For other MongoDB technical support options, see: https://docs.mongodb.org/manual/support/
--- 
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/mongodb-user.
To view this discussion on the web visit https://groups.google.com/d/msgid/mongodb-user/700099f9-9eb4-485c-8a04-641b0906e39c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Why ads?