如何在数组MongoDB中取消选择一个对象?

如何在数组MongoDB中取消选择一个对象?,mongodb,Mongodb,在我的情况下,我只需要结果,但数组中没有objectID 这是我的方法: return Room.findOne( { _id: idRoom, participants: {$elemMatch: {$ne: this.currentUser.profile}}, }, { 'participants.$': 1, } ) 对于elementMatch,问题是当您找到对象时,只返回第一个对象 这是我的结果: "resul

在我的情况下,我只需要结果,但数组中没有objectID

这是我的方法:

return Room.findOne(
    {
      _id: idRoom,
      participants: {$elemMatch: {$ne: this.currentUser.profile}},
    },
    {
      'participants.$': 1,
    }
  )
对于elementMatch,问题是当您找到对象时,只返回第一个对象

这是我的结果:

"result": {
    "_id": "5da5e77f51e08708b79565e8",
    "participants": [
       "5da4d5b40cc94f04a7aaad40"
    ],
这就是我需要的真正结果

"result": {
    "_id": "5da5e77f51e08708b79565e8",
    "participants": [
       "5da4d5b40cc94f04a7aaad40"
       "fwnert9248yrhnqwid13982r" // I have another participants
    ],
我的模型是这样的:

const RoomSchema = new Schema({
  participants: [{type: Schema.Types.ObjectId,ref: 'Profile'}],
  ...
}, options)

由于其他原因,我无法使用聚合,如果您有解决方案,谢谢您,因此我认为您正在尝试使用
findOne()
方法在mongo中形成一个resultset,而聚合管道框架的任何使用都是不可能的,并且由于其他原因无法使用

我不确定这是否可能。我相信你需要执行多个步骤来实现你想要的结果。如果您可以使用聚合管道框架,那么这里有一个管道可以满足所需的结果(我相信)

…但是如果您不能使用聚合管道,那么这里有一个mongoshell脚本,它通过几个步骤完成任务。策略是通过_id捕获整个文档,然后从数组中删除数据元素,然后回显结果

var document = db.Room.findOne( { _id: ObjectId("5da64a62cd63abf99d11f210") } );
document.participants.splice(document.participants.indexOf("5da4d5b40cc94f04a7aaad40"), 1);
document;

很难理解你在寻求什么帮助。你能把你的问题改成一个问题而不是一个陈述吗?对不起,我的英语很差,我更新了@BarrypickerTank@you,非常感谢你的帮助!我使用了切片,只是为了测试,聚合效果很好!
var document = db.Room.findOne( { _id: ObjectId("5da64a62cd63abf99d11f210") } );
document.participants.splice(document.participants.indexOf("5da4d5b40cc94f04a7aaad40"), 1);
document;