I have a user document, each user has an array of objects
Given an array of item tags, I need to find the user whose item array has the item-tag, and return the entire user object except the items array, in which I only want to return the first item tags that existed in the tagArray that was used for the intial query.
//user document
 {
    user: 'John',
    items: [ObjectId('ABC'), ObjectId('123') ...]
 }
//item document
{
  _id: ObjectId('ABC'),
  tag: 'some-unique-id'
}, 
{
  _id: ObjectId('DEF'),
  tag: 'some-unique-tag'
}
Users have a 1-to-N relationship with items, the items may repeat within the User's items array.
This is what I current have, which returns the entire user object, but also all the items within the array.
const tagArray = [ 'some-unique-id', 'some-unique-tag']
items.aggregate([
  { $match: { 'tag': { $in: tagArray } }},
  { $lookup: {
        from: "users",
        localField: "tag",
        foreignField: '_id',
        as: 'userInfo'
       }
  },
  {
     $project: {??}  //<--- I'm pretty sure I'm missing something in the project
])
Outcome that I have now:
{
 _id: ObjectId('ABC'),
  tag: 'some-unique-id'
  userInfo : [ {user: 'John', items: [ObjectId('ABC'), ObjectId('123') ...] }]
}
What I want to achieve:
{
 _id: ObjectId('ABC'),
  tag: 'some-unique-id'
  userInfo : [ {user: 'John', items: [ObjectId('ABC')]} ]
}
Edit: There is a similar question here : Retrieve only the queried element in an object array in MongoDB collection
However in my case, I need the filter condition to be "one of the the tags that is in the tagArray.
Any suggestion or pointers would be appreciated, thank you!
 
     
    