我想从Node.js应用程序中的Mongoose设置中检索一些数据。我注意到无论我写什么作为字段选择,我总是得到_id
字段。有没有办法不去取它?
这就是我现在的做法:
Transaction.find({username : user.username}, ['uniqueId', 'timeout', 'confirmation_link', 'item_name'], function(err, txs){
console.log("user : " + user.username + " with txs: " + txs);
callback(txs);
});
并记录包含_id
字段的结果。
答案 0 :(得分:82)
另一种方法是使用带有前缀-
的文本参数,该参数将从结果中排除此字段或该字段:
Entity.find({ ... }, '-_id field1 field2', function(err, entity) {
console.log(entity); // { field1: '...', field2: '...' }
});
答案 1 :(得分:52)
_id
。例如,
Transaction.find({username : user.username}, { '_id': 0, 'uniqueId' :1, 'timeout': 1, 'confirmation_link': 1, 'item_name': 1}, function(err, txs){
console.log("user : " + user.username + " with txs: " + txs);
callback(txs);
});
答案 2 :(得分:10)
另一种方法:
.toJSON()
和_id
字段__v
.toJSON()
item.id === 'something'
,因为typeof id === 'string'
,而不是ObjectId
。 _id
因为没有,只需id
被忽略了。 扩充JSON:
mySchema.set('toJSON', {
virtuals: true,
transform: (doc, ret, options) => {
delete ret.__v;
ret.id = ret._id.toString();
delete ret._id;
},
});
所以你可以使用:
let item = (await MyCollection.findOne({/* search */}).exec()).toJSON();
if (item.id === 'someString') return item;
我知道这很难看。但到目前为止,这是我最好的坏主意。
答案 3 :(得分:2)
在猫鼬的5.2.13版本(2018年9月)中,使用查询生成器方法可以将其转换为
You can use this command: \dt pg_*