首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在带有节点js的原生mongodb中使用$elemMatch

在带有节点js的原生mongodb中使用$elemMatch
EN

Stack Overflow用户
提问于 2014-02-04 14:45:28
回答 1查看 844关注 0票数 0

我正在使用node js(Modulus server)中的mongodb本地驱动程序。我在主文档中有像子文档数组这样的文档结构。结构类似于bellow,

代码语言:javascript
复制
{ "adname" : "First Advertisement Image", "adsize" : "600*58", "adstatus" : "on", "modifiedAt" : "31-01-2014 05:22:26 PM", "created" : "31-01-2014 03:29:20 PM", "_id" : { "$oid" : "52eb73f8584fbf0000000001" }, "advertisements" : [{ "advname" : "diamond and jewellery", "advexpiredate" : "10-02-2014", "advduration" : "10000", "advstatus" : "on", "advshortimage" : "1391420178839-advertisement-download.jpg", "advlongimage" : "1391420179094-advertisement-bangleimages.jpg", "advid" : 1391420179600, "createdAt" : "03-02-2014 03:06:19 PM" },{ "advname" : "xyz jewellery", "advexpiredate" : "10-02-2014", "advduration" : "10000", "advstatus" : "on", "advshortimage" : "1391420178839-advertisement-download.jpg", "advlongimage" : "1391420179094-advertisement-bangleimages.jpg", "advid" : 1391420199800, "createdAt" : "03-02-2014 03:06:19 PM" } ] }
{ "adname" : "Second Advertisement", "adsize" : "260*58", "adstatus" : "on", "modifiedAt" : null, "created" : "31-01-2014 05:23:36 PM", "_id" : { "$oid" : "52eb8ec033d3510000000001" }, "advertisements" : [] }
{ "adname" : "Third Advertisement", "adsize" : "156*58", "adstatus" : "on", "modifiedAt" : null, "created" : "31-01-2014 05:24:18 PM", "_id" : { "$oid" : "52eb8eea33d3510000000002" }, "advertisements" : [] }
{ "adname" : "Fourth Advertisement", "adsize" : "250*290", "adstatus" : "on", "modifiedAt" : null, "created" : "31-01-2014 05:24:48 PM", "_id" : { "$oid" : "52eb8f0833d3510000000003" }, "advertisements" : [] }

我必须根据两个文档i从任何一个主文档中检索特定的子文档。我在节点js中使用了以下代码,但我无法按预期检索。

代码语言:javascript
复制
exports.getAddsByAdvertisementId = function(id,adid,callback)
{
    advertisement.find({ _id: getObjectId(id) }, { advertisements: { $elemMatch: { advid: adid } } }, function(e,adds) {
        if(e) callback(e,null);
        else {
            adds.toArray(function(error, results) {
                if(error) callback(error,null);
                else callback(null,results);
            });
        }   
    });
}

例如,如果我传递_id:52eb73f8584fbf0000000001和advertisements.advid:1391420179600意味着(即,getAddsByAdvertisementId(52eb73f8584fbf0000000001,1391420179600)我的结果应该是

代码语言:javascript
复制
{ "advname" : "diamond and jewellery", "advexpiredate" : "10-02-2014", "advduration" : "10000", "advstatus" : "on", "advshortimage" : "1391420178839-advertisement-download.jpg", "advlongimage" : "1391420179094-advertisement-bangleimages.jpg", "advid" : 1391420179600, "createdAt" : "03-02-2014 03:06:19 PM" }
EN

回答 1

Stack Overflow用户

发布于 2014-02-04 15:31:08

你所说的没有得到你所期望的东西的意思大概是你没有得到一个返回的文档。

检查您作为adid传入的值是否不是字符串,或者将其强制转换为函数内的int。

另外,由于您首先使用主_id查找文档,因此只能得到1个结果,否则将什么也得不到。请改用findOne,以避免进入只有1项的数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21545691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档