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