Javascript mongo查找选择器导致返回不匹配的结果

Javascript mongo查找选择器导致返回不匹配的结果,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,userLink\u titles=Entries.find({xsbmgszyxbcqdonf}) 返回: docs: Object CBqHrJvTE8xz7u2Rz: Object _id: "CBqHrJvTE8xz7u2Rz" author: "AHSwfYgeGmur9oHzu" Q8m7PMbQr62E3A73f: Object _id: "Q8m7PMbQr62E3A73f" author: "AHSwfYgeG

userLink\u titles=Entries.find({xsbmgszyxbcqdonf})

返回:

  docs: Object
    CBqHrJvTE8xz7u2Rz: Object
      _id: "CBqHrJvTE8xz7u2Rz"
      author: "AHSwfYgeGmur9oHzu"
    Q8m7PMbQr62E3A73f: Object
      _id: "Q8m7PMbQr62E3A73f"
      author: "AHSwfYgeGmur9oHzu"
    bxSbMgszYxbCqDonF: Object
      _id: "bxSbMgszYxbCqDonF"
      author: "AHSwfYgeGmur9oHzu"
正如您所看到的,它返回正确的文档,但也返回不正确的文档

findOne:
userLink\u titles=Entries.findOne({u id:“bxSbMgszYxbCqDonF”})
按预期工作,只返回正确的文档

我将使用findOne,但最终目的是将_id选择器设置为一个数组,这样find将返回与数组中的_id选择器匹配的所有文档的文档

奖励积分:

假设我想检索一组文章的标题,其中对这些文章的引用(文章集合中文章的_id)已保存在用户集合中

因此,我将有效地从用户集合检索文章引用,并使用这些引用从文章集合检索文章标题

代码/伪代码是什么样子的?类似于下面的内容(我假设下面是查询/检索记录的一些最佳实践的完全巴斯德化)


如果要在控制台中检查查询结果,请使用
Entries.find(…).fetch()


Entries.find()
返回一个,这是一个用于高效呈现列表的构造,因此只有更改的条目需要重新呈现。从使用
{{{each}}
的帮助程序返回游标将导致响应速度更快的应用程序。

如果要在控制台中检查查询结果,请使用
条目。查找(…).fetch()


Entries.find()
返回一个,这是一个用于高效呈现列表的构造,因此只有更改的条目需要重新呈现。从使用
{{{#each}}
的帮助程序返回游标将导致响应更快的应用程序。

对于那些对奖金问题感兴趣的人,您需要MongoDB的

如果这将在服务器上的发布方法中使用,则您可能希望签出

下面的函数是检索信息的有效方法。它对数据库进行两次调用。使用
字段
参数可防止在db和Web服务器之间发送不必要的数据

/**
 * Titles of a User's saved articles
 * 
 * @method getSavedTitles
 * @param {String} username
 * @return {Array} a list of article titles
 */
function getSavedTitles (username) {
  var user,
      ids,
      linkedArticles,
      titles;

  user = Users.findOne({username: username}, 
                       {fields:{ _id:0, profile:1 }});

  if (!user || !user.profile) {
    throw new Meteor.Error(500, 'Missing user profile');
  }

  ids = user.profile.savedArticleIds;

  if (!ids || !_.isArray(ids)) {
    throw new Meteor.Error(500, 'Missing saved article ids');
  }

  linkedArticles = Articles.find({_id: {$in: ids}},
                        {fields:{ _id:0, title:1 }});

  titles = _.pluck(linkedArticles.fetch(), "title");

  return titles;

}  // end getSavedTitles

对于那些对奖金问题感兴趣的人,您需要MongoDB的

如果这将在服务器上的发布方法中使用,则您可能希望签出

下面的函数是检索信息的有效方法。它对数据库进行两次调用。使用
字段
参数可防止在db和Web服务器之间发送不必要的数据

/**
 * Titles of a User's saved articles
 * 
 * @method getSavedTitles
 * @param {String} username
 * @return {Array} a list of article titles
 */
function getSavedTitles (username) {
  var user,
      ids,
      linkedArticles,
      titles;

  user = Users.findOne({username: username}, 
                       {fields:{ _id:0, profile:1 }});

  if (!user || !user.profile) {
    throw new Meteor.Error(500, 'Missing user profile');
  }

  ids = user.profile.savedArticleIds;

  if (!ids || !_.isArray(ids)) {
    throw new Meteor.Error(500, 'Missing saved article ids');
  }

  linkedArticles = Articles.find({_id: {$in: ids}},
                        {fields:{ _id:0, title:1 }});

  titles = _.pluck(linkedArticles.fetch(), "title");

  return titles;

}  // end getSavedTitles

您对
\u id
的搜索在文档的顶层匹配。从您的结果来看,您引用的不正确文档似乎以(\u id,author pairs)的形式嵌入到
docs
数组中。我在这里托管了一个示例站点:我提到的查找操作是从控制台运行的:对于托管站点,如果您在控制台中运行:userLink\u titles=Entries.find({u id:“HPJKBJXWTXFEGRC9”})我想你只会拿回文章。相反,正如你所说,它是在更高级别上匹配的。那么,我如何只检索文档中与选择器id匹配的部分,或者在这种类型的查询中这是不合法的?你对
\u id
的搜索在文档的顶层匹配。从你的结果中,它是应用程序您所引用的不正确文档似乎以(_id,author pairs)的形式嵌入到
docs
数组中?我在这里托管了一个示例站点:我提到的查找操作是从控制台运行的:对于托管站点,如果您在控制台中运行:userLink_titles=Entries.find({u id:“HPJKBJXWTXFEGRC9”})我想你只会拿回文章。相反,正如你所说,它是在更高级别上匹配的。那么,我如何才能只检索文档中与选择器id匹配的部分,或者这在这种类型的查询中是不合法的?我希望我能标记两个正确的答案……将你的答案发布在这里,我会爱你:我希望我能d标记两个正确答案…将你的答案贴在这里,我会给它爱: