我在访问加权搜索时添加的属性时遇到了一些困难:
Post.collection
.find(
{ $text: { $search: 'whatever }},
{ score: { $meta: 'textScore' } }
)
.sort(
{ score: { $meta: 'textScore' } }
)
.exec(function(error, results) {
console.log(results[0].score) // returns undefined
})
如果我将console.log作为单个结果,我可以看到score
属性:
{
title: 'Test Post 6',
content: 'keyword keyword keyword keyword keyword keyword',
score: 3.9375,
__v: 0,
slug: 'test-post-6',
_id: 569a4f33fad6dfc724e02508
}
但通过.score
或按键['score']
访问该值会返回undefined
。
如何访问score
元属性?
答案 0 :(得分:0)
我的代码中已经使用了下划线,因此我利用_.getKeys()
来查看结果中的所有键。有两个键,get()
和getValue()
可用于返回score
:
Post.collection
.find(
{ $text: { $search: 'whatever }},
{ score: { $meta: 'textScore' } }
)
.sort(
{ score: { $meta: 'textScore' } }
)
.exec(function(error, results) {
console.log(results[0].getValue('score'))
})
仅供参考,以下是MongoDB 3.0.8结果对象的可用键:
[ '$__',
'isNew',
'errors',
'_doc',
'$__original_save',
'save',
'_pres',
'_posts',
'db',
'discriminators',
'__v',
'_',
'list',
'content',
'title',
'slug',
'id',
'_id',
'schema',
'collection',
'getUpdateHandler',
'$__handleSave',
'$__save',
'$__delta',
'$__version',
'increment',
'$__where',
'remove',
'model',
'on',
'once',
'emit',
'listeners',
'removeListener',
'setMaxListeners',
'removeAllListeners',
'addListener',
'$__buildDoc',
'init',
'$__storeShard',
'hook',
'pre',
'post',
'removePre',
'removePost',
'_lazySetupHooks',
'update',
'set',
'$__shouldModify',
'$__set',
'getValue',
'setValue',
'get',
'$__path',
'markModified',
'modifiedPaths',
'isModified',
'$isDefault',
'isDirectModified',
'isInit',
'isSelected',
'validate',
'$__validate',
'validateSync',
'invalidate',
'$markValid',
'$isValid',
'$__reset',
'$__dirty',
'$__setSchema',
'$__getArrayPathsToValidate',
'$__getAllSubdocs',
'$__registerHooksFromSchema',
'$__handleReject',
'$toObject',
'toObject',
'toJSON',
'inspect',
'toString',
'equals',
'populate',
'execPopulate',
'populated',
'depopulate',
'$__fullPath' ]