有一个架构:
{model.js}
var someSchema = new mongoose.Schema({
a : [Number],
b : String,
c : [Number],
d : Number
});
我尝试 find()每个文档,并从a中选择一个元素,从c中选择具有相同索引的元素和b。
这就是我的尝试:
{get.js}
var some = require('model');
some.find() // find
.limit(3) // limit for 3 docs (test part)
// NEXT LINE IS NOT WORKING
.select('a.0 b c.0 -d') // select {array: a and b, index:0}, b less d
.exec(function(err, dataList) {
if (err) {
console.warn(err);
return ;
}
console.log(data[0].a); // Show in console array a
console.log(data[0].b); // String b
console.log(data[0].c); // array c
// not select d, so d = undefined
});
在这部分代码中,我可以选择这样的数组索引,但是当我尝试这段代码时,我的数组被选中但内部没有元素。
有没有办法从架构中选择数组的索引?
答案 0 :(得分:1)
你想要$slice
来代替:
some.find()
.limit(3)
.select({
"a": { "$slice": 1 },
"b": 1,
"c": { "$slice": 1 }
})
.exec(function(err,dataList) {
对于第一个元素,只需要返回的数字,或者通过索引位置然后返回的数字。所以对于第二个索引,它将是:
some.find()
.limit(3)
.select({
"a": { "$slice": [1,1] },
"b": 1,
"c": { "$slice": [1,1] }
})
.exec(function(err,dataList) {
这需要将“完整对象”形式的投影提供给.select()
语句,或以.find()
作为投影参数提供。
另请注意,预测只是“完全”包含列表或“排除”。你不能“混合”包含或排除