【问题标题】:How to find an element in an array in mongodb?如何在mongodb的数组中查找元素?
【发布时间】:2014-12-17 03:00:20
【问题描述】:

我正在尝试在数组中查找具有某个元素的对象:

所以我的查询如下:

router.get('/', function(req, res) {
    var userSubscribed = req.user.email;
    db.posts.find({ "SubscriberList": { $elemMatch: userSubscribed}}, function(err, object){
        if (err) console.log(err);
        else console.log(object);
        res.render('index', { title: 'Home', user: req.user});
    })
});

被安慰的错误如下:

{ [MongoError: Can't canonicalize query: BadValue $elemMatch needs an Object] name: 'MongoError'}

我的数据库中的对象示例:

{ 
    "_id" : ObjectId("5490afa8416841105626cc41"), 
    "post" : { 
        "title" : "Ralph", 
        "category" : "Node", 
        "date" : "2014-12-11", 
        "description" : "Node coming soon!" 
    }, 
    "owner" : "bousamra.ralph@gmail.com", 
    "status" : "active", 
    "category" : "Node", 
    "SubscriberList" : ["alaric@hotmail.com" ]
}

【问题讨论】:

标签: javascript json mongodb


【解决方案1】:

一般情况下,匹配单个数组元素的多个属性时,只需要使用$elemMatch即可。

SubscriberList 只是一个字符串数组,您可以这样做:

router.get('/', function(req, res) {
    var userSubscribed = req.user.email;
    db.posts.find({ "SubscriberList": userSubscribed }, function(err, object){
        if (err) console.log(err);
        else console.log(object);
        res.render('index', { title: 'Home', user: req.user});
    })
});

【讨论】:

    【解决方案2】:

    你应该试试这个代码:

    router.get('/', function(req, res) {
    var userSubscribed = req.user.email;
    db.posts.find({owner:userSubscribed}, function(err, object){
        if (err) console.log(err);
        else console.log(object);
        res.render('index', { title: 'Home', user: req.user});
    })
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-11
      • 1970-01-01
      相关资源
      最近更新 更多