【问题标题】:Fetch a field from array MongoDB Meteor从数组 MongoDB Meteor 中获取一个字段
【发布时间】:2017-09-13 08:13:46
【问题描述】:

您好,我有以下集合结构:

{
    "_id" : "HZw2ktDPm6EWnGaFt",
    "createdAt" : ISODate("2017-04-16T17:40:59.055Z"),
    "pollName" : "",
    "entryOwner" : "eHPeQPMd94MQFNXmg",
    "question" : [ 
        {
            "name" : "Question 1",
            "questionId" : "sdPzbn9SWjE46HtM2"
        }, 
        {
            "name" : "Question 2",
            "questionId" : "vpMrpbJ2LZKMLEYKe"
        }
    ],
    "sharedWith" : [ 
        {
            "id" : "jjX5EDdqMtcyQwd6h",
            "name" : "person 1",
            "votes" : 0
        }, 
        {
            "id" : "b3Ctr6LFZMd9smd4B",
            "name" : "person 2",
            "votes" : 0
        }
    ],
    "voters" : [ 
        {
            "voterId" : "eHPeQPMd94MQFNXmg",
            "questionId" : "vpMrpbJ2LZKMLEYKe",
            "optionId" : "EKnYKXEFBWnr4hnCP",
            "peopleId" : "b3Ctr6LFZMd9smd4B"
        }, 
        {
            "voterId" : "eHPeQPMd94MQFNXmg",
            "questionId" : "vpMrpbJ2LZKMLEYKe",
            "optionId" : "EKnYKXEFBWnr4hnCP",
            "peopleId" : "jjX5EDdqMtcyQwd6h"
        }, 
        {
            "voterId" : "eHPeQPMd94MQFNXmg",
            "questionId" : "sdPzbn9SWjE46HtM2",
            "optionId" : "rjYLitibXDJjGYKM7",
            "peopleId" : "b3Ctr6LFZMd9smd4B"
        }, 
        {
            "voterId" : "eHPeQPMd94MQFNXmg",
            "questionId" : "Q6JiaGFAi2LRHS7GQ",
            "optionId" : "wFoduKp23cSYJJG9i",
            "peopleId" : "b3Ctr6LFZMd9smd4B"
        }
    ]
}

我想通过使用这些值来获取 Voters.peopleId 的值。

        "voterId" : "eHPeQPMd94MQFNXmg",
        "questionId" : "vpMrpbJ2LZKMLEYKe",
        "optionId" : "EKnYKXEFBWnr4hnCP",

我试过了,但没用,它返回了整个文档,但我想要的只是一个字段:

var getPeopleId = Polls.findOne({ 
        _id:this.props.poll._id}, {"voters": { 
          $elemMatch :{voterId:Meteor.userId(),questionId:selectedQuestionId,optionId:selectedOptionId}}})

非常感谢

【问题讨论】:

    标签: arrays mongodb meteor find


    【解决方案1】:

    您在投影(第二个参数)而不是查询(第一个参数)中有$elemMatch。您还需要将结果投影为仅包含第一个匹配项。试试:

    const poll = Polls.findOne(
      { 
        _id:this.props.poll._id,
        voters: { 
          $elemMatch: {
            voterId: Meteor.userId(),
            questionId: selectedQuestionId,
            optionId: selectedOptionId
        }
      },{
        'voters.$': 1
      });
    // guard against missing keys or no results
    const peopleId = poll && poll.voters && poll.voters.peopleId;
    

    【讨论】:

    • 感谢您的回答,但它仍然返回所有字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多