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 } } ] });
看来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 });
试试看!