mongoose,从子文件拉

这是我的文件:

{ password: '87654321', title: 'Organization A', members: [ { tier: 1, joinedDate: Sun May 12 2013 00:00:00 GMT+0200 (CEST), user: 543fc462ed385e5e77a98d56 }, { tier: 2, joinedDate: Sat May 11 2013 00:00:00 GMT+0200 (CEST), user: 543fc462ed385e5e77a98d57 }, { tier: 3, joinedDate: Fri May 10 2013 00:00:00 GMT+0200 (CEST), user: 543fc462ed385e5e77a98d58 } ] } 

我想编写一个查询,拉一个给定的用户_.id成员

拉命令可能是我应该使用的

http://mongoosejs.com/docs/api.html#types_array_MongooseArray-pull

 mongoose.model('organization').findOne({_id:user.organization}, function(err, org){ org.members.pull({'user._id':user._id}); org.save(); }) 

这不起作用。 我究竟做错了什么?

更新

我的模式:

 var organizationSchema = new Schema({ title: String, password: { type: String, required: true, index: { unique: true } }, members: [ { tier: { type: Number, required: true, min:1, max:4}, joinedDate: Date, user:{ type: Schema.ObjectId, ref: 'user', required: true, unique:true } } ] }); 

       

网上收集的解决方案 "mongoose,从子文件拉"

看来MongooseArray#pull方法只适用于你的元素具有_id属性的情况。

我发现使用直接调用进行update更容易,以避免这些惊喜:

 mongoose.model('organization').update( {_id: user.organization}, {$pull: {members: {user: user._id}}}, function(err, numAffected) { ... } ); 

我没有看到您的成员数组中引用任何id,删除_id并直接执行到您的用户属性,因为这是架构上的内容。

 mongoose.model('organization').findOne({_id:user.organization}, function(err, org){ org.members.pull({'user':user._id}); org.save(); }) 

编辑:也许这一个

 mongoose.model('organization').update({ _id: user.organization }, {$pull: {members.user: user._id}}, {}, function(err, numAffected){ //check numAffected }); 

试试看!