Mongodb如何使用$ elemMatch来限制结果

Xin*_*nzz 1 mongoose mongodb

我的问题是:我的结构类似于:

{
  id: 1,
  participants: [
    { name: "joe", status: 0 },
    { name: "james", status: 2}
  ],
  content: "mongomongo"
}

{
  id: 2,
  participants: [
    { name: "joe", status: 1 },
    { name: "jordan", status: 3}
  ],
  content: "dongodongo"  
}

我想要做的是运行一个与此几乎相同的查询:

db.find({ '_id': { $in: someArray}}, { participants: {$elemMatch: {'name': someName }}}
Run Code Online (Sandbox Code Playgroud)

我会为$ in指定一个对象ID数组,然后我会提供一个用户名.会发生什么是它会给我两个对象,但参与者数组只有$ elemMatch找到的条目:

{
  id: 1,
  participants: [
    { name: "joe", status: 0 }
  ]
}

{
  id: 2,
  participants: [
    { name: "joe", status: 1 }
  ]
}

这就是我想要的,但我不想要的部分是它遗漏了其他领域(即content).如何调整查询,使其仍然返回参与者数组中的一个字段,还返回其他字段,如内容?

先感谢您!

Xin*_*nzz 5

实际上找到了我的问题的解决方案.只需要调整我使用的原始查询.因为我使用Mongoose来管理mongodb交互,所以我混淆了投影字段和选项字段.

这是有效的查询:

db.find({ '_id': { $in: someArray}}, { participants: {$elemMatch: {'name': someName }}, content: 1, [anything] : 1});
Run Code Online (Sandbox Code Playgroud)