Mongodb find()只包含非空数组
Mongodb find() only include non-empty arrays
我想用查找查询实现的是只包括"someArray"s,如果它的内部数组不是空的。例如下面的JSON:
{
"document": "some document",
"someArray": [
{
"innerArray": [
"not empty"
]
},
{
"innerArray": [
[] //empty
]
}
]
}
将返回这个:
{
"document": "some document",
"someArray": [
{
"innerArray": [
"not empty"
]
}
]
}
我使用以下查找:
Visit.find({'someArray.innerArray.0': {$exists: true}}, function(err, data){});
但是,这会返回所有的数据。
也试过了:
Visit.find({}, {'someArray.innerArray': {$gt: 0}}, function(err, data) {});
但是这没有返回任何
对于如何处理这个问题有什么想法吗?
欢呼
这里检查非空数组的一般情况是检查"first"元素是否实际存在。对于单个匹配,您可以使用位置$
运算符进行投影:
Vist.find(
{ "someArray.innerArray.0": { "$exists": true } },
{ "document": 1,"someArray.$": 1},
function(err,data) {
}
);
如果你需要不止一个匹配,或者数组嵌套得比这更深,那么聚合框架就是你需要处理更难的投影和/或"过滤"多个匹配的数组结果的工具:
Visit.aggregate(
[
// Match documents that "contain" the match
{ "$match": {
"someArray.innerArray.0": { "$exists": true }
}},
// Unwind the array documents
{ "$unwind": "$someArray" },
// Match the array documents
{ "$match": {
"someArray.innerArray.0": { "$exists": true }
}},
// Group back to form
{ "$group": {
"_id": "$_id",
"document": { "$first": "$document" },
"someArray": { "$push": "$someArray" }
}}
],function(err,data) {
}
)
这里值得注意的是,你把它称为"空",但实际上它不是,因为它实际上包含另一个空数组。您可能不希望对实际数据这样做,但如果有的话,您需要这样过滤:
Visit.aggregate(
[
{ "$match": {
"someArray": { "$elemMatch": { "innerArray.0": { "$ne": [] } } }
}},
{ "$unwind": "$someArray" },
{ "$match": {
"someArray.innerArray.0": { "$ne": [] }
}},
{ "$group": {
"_id": "$_id",
"document": { "$first": "$document" },
"someArray": { "$push": "$someArray" }
}}
],function(err,data) {
}
);
相关文章:
- JavaScript 自包含函数数组访问自我索引
- MongoDB 无法将$addToSet应用于 Meteor JS 中的非数组
- 如何对姓氏进行排序,格式化电话号码,并返回一个包含对象数组值的字符串
- AngularJS:如何使用ng repeat来显示父数组中包含的数组的所有元素
- 如何在不重复非数组的情况下将元素推送到数组中
- 使用包含参数数组的数组调用函数,而不是仅列出数组
- 仅包含某些数组值的单个弹出窗口.JavaScript
- 将数组原型函数与非数组一起使用
- 当项目包含在数组中时,在 ng-repeat 上以角度添加类
- 数组包含其他数组中的所有元素
- 输出一个结果数组,其中包含给定数组的唯一元素的分组计数
- ng在非数组对象上重复
- Parse.com正在查询包含指针数组的对象,该数组无法使用include
- Javascript 数组包含/包含子数组
- 如何递归地移除包含空数组的嵌套对象
- 如何在搜索条件中包含子数组
- 如何确定对象是否包含在数组中
- 如何检查包含子数组的数组的大小?
- 如何获取对象中包含的数组的长度
- Iframe下一页按钮SRC(非数组,实际SRC变化)