Node.js 仅在mongoose中填充的数组中删除文档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

我很难使用填充查询从数组中删除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},
  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的缩写语法。

我也面临同样的问题,如果您给出详细的解决方案,这将非常有帮助。您是救世主!