Underscore的findWhere和MongoDB对象

时间:2014-12-01 19:28:14

标签: javascript ruby-on-rails angularjs mongodb underscore.js

我使用MongoDB,我想在Angular应用程序中使用Underscore.js。 我有一个模型“电子邮件”,其中包含以下字段:“subject”,“body”和“id”。

此电子邮件对象在浏览器控制台中如下所示:

$$hashKey   
    "005"

_id     
    Object { $oid="5478774a6a61734d8a000000"}

body        
    "Here is the sample conte...le ble ble. Nice email."

subject     
    "This is first template"

这是Angular中的控制器代码:

$scope.viewEmail = function(emailId) {

    var email = _.findWhere(emailData.data.emails, { _id: emailId });

    console.log(email);
};

所以,我只想查找一封包含特定id的电子邮件 - 我想要的id保存在本地变量emailId中。

我应该这样做:_id.$oid: emailId但是它会导致javascript控制台出现语法错误:“缺少:属性id之后”。

2 个答案:

答案 0 :(得分:1)

这将完成这项工作: _.find(list, predicate, [context])

这是一个小提琴: http://jsfiddle.net/bqegdy2t/

var emailData = {
    data: {
        emails: [
            { _id: { $oid: "someId" }, body: "Hello Every Body1" },
            { _id: { $oid: "someOtherId" }, body: "Hello Every Body2" },
        ]
    }
};

var emailId = "someId";
var email = _.find(emailData.data.emails, function(email) { 
                return email._id.$oid === emailId;
            });

console.log(email);

答案 1 :(得分:0)

困难在于mongo objectid格式,它是一个包含字符串的异常JSON对象。

尝试_id: emailId_id.$oid: emailId

另一种选择:点符号通常需要它周围的引号"_id.$oid" : emailId,尤其是那些带有美元符号的引号