2013-04-05 100 views
1

蒙戈内嵌套数组更新具体数值我有几分以下模式(无_id) -通过猫鼬

{uid: String, 
inbox:[{msgid:String, someval:String}] 
} 

现在,在请求我得到的MsgId和我用它在下面猫鼬查询像这个 -

my_model.findOne({'inbox.msgid':'msgidvaluexyz'} 
    , function(err, doc) {   
    console.log(doc); 
    return !0; }) 

现在的问题是,我得到整个文件,其中有具体的消息收件箱中的其他消息一起 -

Output- 
    {uid:'xyz', 
    inbox:[ 
    {msgid:,someval}, 
    {msgid:'our queried msgid',someval}, //required sub array 
    {msgid:,someval}, 
     ] 
     } 

现在我可以使用什么查询来获取特定的子数组,因为文档收件箱太大而无法循环。

回答

2

使用$ positional selection operator有返回的文档仅包括匹配inbox元素:

my_model.findOne({'inbox.msgid':'msgidvaluexyz'} 
    , {'inbox.$': 1} 
    , function(err, doc) {   
    console.log(doc); 
    return !0; }) 
+0

thx man..sure看起来好像会得到完成的工作..将节省一些严重的处理时间.. :) – digster 2013-04-06 09:13:51

+0

一个快速问题...回调确实返回特定的子数组... ..但是当我尝试更改某些内容并保存回调变量时......说callback_doc.inbox [0] .changed_var = something; callback_doc.save()..它更新对第一个索引阵列(索引0)..我们如何引用回调中的特定索引..就像callback_doc.inbox [$]? – digster 2013-04-09 11:28:15

+0

@ user597272你没有整个对象,所以我想你会想通过'update'而不是'save'来更新它,并且使用'$'位置更新操作符,它在更新方面起到相同的作用。 – JohnnyHK 2013-04-09 11:40:01

0

如果我理解正确你的问题:

// find each person with a last name matching 'Ghost' 
var query = Person.findOne({ 'name.last': 'Ghost' }); 

// selecting the `name` and `occupation` fields 
query.select('name occupation'); 

http://mongoosejs.com/docs/queries.html

您可以选择您想回到哪个领域。你只能得到inbox数组或除此之外的所有数据。

+0

srry..but我想你没有得到我的问题妥善......“收件箱”字段是一个数组,它仍然会有所有味精的子阵列.. – digster 2013-04-05 10:25:47