Node.js 仅在mongoose中填充的数组中删除文档objectid
我很难使用填充查询从数组中删除objectid 这是我的模式Node.js 仅在mongoose中填充的数组中删除文档objectid,node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,我很难使用填充查询从数组中删除objectid 这是我的模式 var userSchema = new Schema({ username: String, password: String, books: [{type: Schema.Types.ObjectId, ref: 'Book'}] } ); var bookSchema = new Schema({ bookid: {type:String, unique:true, required:true}, im
var userSchema = new Schema({
username: String,
password: String,
books: [{type: Schema.Types.ObjectId, ref: 'Book'}]
}
);
var bookSchema = new Schema({
bookid: {type:String, unique:true, required:true},
imgURL: String,
fortrade: Boolean
});
问题在于下面显示的查询。当我只想删除books数组中的objectid时,它会删除book schema项
users.findOne({'_id':userid}).populate('books').exec(function(usererr,userdata){
if (usererr) return console.error(usererr);
userdata.books.forEach(function(elm,idx){
if(elm.bookid==_book.bookid){
userdata.books[idx].remove();
}
})
});
如果只需从
.populate()
中选择相关对象输出中的引用字段,则只需提供所需字段或要在调用中删除的字段列表:
users.findOne({u-id':userid})
.populate('books',“-\u id”)
.exec(函数(usererr、userdata){
//userdata包含不带_id字段的相关数据
});
因此,.populate()
中的第二个参数指定了要在后续查询中选择的字段。-
符号表示“排除”字段,否则需要指定要具体包括的字段列表
这是基本的MongoDB字段“投影”。这里的一条规则是,您不能“混合”包含或排除这两者。因此,要么明确:
.populate('books','bookid imgURL forTrade')
或者只删除“特殊”字段:
.populate('books','-\u id-\u v'))
其中,\u id
是通用的“始终包含”主键,\u v
是mongoose生成的版本键,您可能也不希望在结果中使用它
另请参阅核心文档以及mongoose的缩写语法。我也面临同样的问题,如果您给出详细的解决方案,这将非常有帮助。您是救世主!