如何从猫鼬的数组中找到对象
Posted
技术标签:
【中文标题】如何从猫鼬的数组中找到对象【英文标题】:How can i find object from an array in mongoose 【发布时间】:2014-01-14 04:25:38 【问题描述】:我有如下架构:-
var P =
s : [
data : [],
sec : mongoose.Schema.Types.ObjectId
]
;
现在我只想找到部分的对象而不是整行。就像如果我通过 sec
值,我只想要那个 sec
对象的 s.data
的值。
示例:-
s : [
data : [],
sec : '52b9830cadaa9d273200000d'
,
data : [],
sec : '52b9830cadaa9d2732000005'
]
结果应该是这样的 -
data : [],
sec : '52b9830cadaa9d2732000005'
我不想要所有整行。可能吗?如果是,请帮助我。
【问题讨论】:
【参考方案1】:您可以使用$elemMatch
投影运算符将s
之类的数组字段限制为单个匹配元素,但您不能使用find
删除文档的s
级别。
db.test.find(, _id: 0, s: $elemMatch: sec: '52b9830cadaa9d2732000005')
输出:
"s": [
"data": [ ],
"sec": "52b9830cadaa9d2732000005"
]
【讨论】:
【参考方案2】:不使用 Mongo 或 db,但使用 Pure JavaSript 技能 这是您提到的解决方案 Node.js,它将执行以下任务。 p>
架构
var P = s : [
data : [],
sec : '52b9830cadaa9d273200000d'
,
data : [],
sec : '52b9830cadaa9d2732000005'
]
;
搜索方法代码
var search = function (search_sec)
for (var i=0; i<(P.s.length);i++)
var pointer = P.s[i].sec;
var dataRow = P.s[i];
if((pointer) === search_sec )
console.log(dataRow);
;
这里是你如何调用 - search('search_id');
例如输入: 搜索('52b9830cadaa9d2732000005');
输出:
[object Object]
data: [],
sec: "52b9830cadaa9d2732000005"
工作演示在这里 - http://jsbin.com/UcobuVOf/1/watch?js,console
【讨论】:
【参考方案3】:您始终可以使用 find() 获取某个字段的值。例如在你的情况下:
db.collectionName.find(,s.data:1)
所以第一个括号是应用任何条件或查询,而在第二个括号中,您必须将字段定义为 1(仅获取那些字段值)。
请查看http://docs.mongodb.org/manual/reference/method/db.collection.find 了解更多信息。 让我知道它是否能解决您的问题。
【讨论】:
感谢您的回复。你的回答给了我整个数组。但我只想要数组的特定对象。如果您有任何建议,请回复我。以上是关于如何从猫鼬的数组中找到对象的主要内容,如果未能解决你的问题,请参考以下文章