访问MongoDB查询中通过$ meta添加的属性

时间:2016-01-16 14:37:14

标签: mongodb

我在访问加权搜索时添加的属性时遇到了一些困难:

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元属性?

1 个答案:

答案 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' ]