再次使用mongo v3.4并引用以下文档:https://docs.mongodb.com/v3.4/tutorial/project-fields-from-query-results/
我的示例如下:
const m = this.getCollection(SOME_COLLECTION);
m.find({
'_id': {
$nin: [Ace, Bay],
},
'value.someCategory': {
$type: 'object',
},
}, {
'_id': 0,
'value.someCategory': 1,
}).toArray((err, doc) => {
if (err) {
console.log(err);
} else {
console.log(doc);
}
});
我的doc
数组将返回遵循我的value.someCategory
类型的对象过滤器的所有项目,但不会删除_id
并返回所有字段,即使我愿意仅指定value.someCategory
字段。
mongo中的示例数据:
[
{
_id: 'hello',
value: {
someCategory: [Object],
name: 'hello',
otherCategory: true,
}
},
{
_id: 'Ace',
value: {
someCategory: [Object],
name: 'Ace',
otherCategory: true,
}
},
{
_id: 'testing',
value: {
someCategory: null,
name: 'testing',
otherCategory: true,
}
},
]
并且期望结果是:
[
{
someCategory: [Object],
},
]
根据上面链接的文档,指定的字段应为第二个参数。我想知道现在使用toArray
是否会影响返回值?
答案 0 :(得分:1)
改为使用.project
光标方法
db.collection('collection')
.find({ '_id': { '$nin': [Ace, Bay] }, 'value.someCategory': { '$type': 'object' }})
.project({ '_id': 0, 'value.someCategory': 1 })
.toArray()
答案 1 :(得分:0)
使用选择功能并定义要投影的必填字段。
const m = await Model.find({
'_id': {
$nin: [Ace, Bay],
},
'value.someCategory': {
$type: 'object',
},
}).select('-_id value.someCategory').lean();
console.log(m)