Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDB获取至少有一个非空数组的文档_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js MongoDB获取至少有一个非空数组的文档

Node.js MongoDB获取至少有一个非空数组的文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我的模式: db.Interactives=mongoose.model( "互动",, 新模式({ url:String, 形式:数组,, 输入:数组, 文本区域:数组, }) ); 我想查找至少有一个数组不为空的所有文档,因此我尝试: wait db.Interactives.find({ $elemMatch:{ 表格:{$ne:[]}, 输入:{$ne:[]}, text区域:{$ne:[]}, }, }) .选择('-\u id-\u v') .exec() 如何实现这一点?您的代

我的模式:

db.Interactives=mongoose.model(
"互动",,
新模式({
url:String,
形式:数组,,
输入:数组,
文本区域:数组,
})
);
我想查找至少有一个数组不为空的所有文档,因此我尝试:

wait db.Interactives.find({
$elemMatch:{
表格:{$ne:[]},
输入:{$ne:[]},
text区域:{$ne:[]},
},
})
.选择('-\u id-\u v')
.exec()

如何实现这一点?

您的代码的问题是,它正在尝试确保没有数组是空的。另一个问题是
$elemMatch
在数组元素中搜索值。如果不想这样做,您需要将数组与空白数组进行比较。您需要做的唯一更改是将
$elemMatch
替换为
$或
,并添加类似的括号

    await db.Interactives.find({
            $or: [
                {forms: { $ne: [] }},
                {inputs: { $ne: [] }},
                {textarea: { $ne: [] }},
            ]
        })
            .select('-_id -__v')
            .exec()

您在查询中遗漏了
$或

也可以通过多种方式实现。 假设这是您的数据集

[
  {"Id_Cust": "4145","firstName": "Albade","language": ["English,Nepali"],"degree": []},
  {"Id_Cust": "5296","firstName": "Rafael","language": [],"degree": ["Bachelor,Masters"]},
  {"Id_Cust": "6192","firstName": "Abdul","language": [],"degree": []}
]
现在,您可以执行以下操作:

db.collection.find({
  $or: [
    {language: {$exists: true,$not: {$size: 0}}},
    {degree: {$exists: true,$not: {$size: 0}}}
  ]
})
如果数组中的字段是可选字段,请使用
$exists
,否则可以将其排除

备选方案一

db.collection.find({
  $or: [
    {language: {$ne: []}},
    {degree: {$ne: []}}
  ]
})
db.collection.find({
  $or: [
    {language: {$gt: []}},
    { degree: {$gt: []}}
  ]
})
如果数组中的字段是可选字段,请像上面的查询一样使用
$exists

备选方案二

db.collection.find({
  $or: [
    {language: {$ne: []}},
    {degree: {$ne: []}}
  ]
})
db.collection.find({
  $or: [
    {language: {$gt: []}},
    { degree: {$gt: []}}
  ]
})
如果数组中的字段是可选字段,请使用
$exists
,就像在第一个查询中一样

所有方法都提供相同的输出

[
  {
    "Id_Cust": "4145",
    "_id": ObjectId("5a934e000102030405000000"),
    "degree": [],
    "firstName": "Albade",
    "language": [
      "English,Nepali"
    ]
  },
  {
    "Id_Cust": "5296",
    "_id": ObjectId("5a934e000102030405000001"),
    "degree": [
      "Bachelor,Masters"
    ],
    "firstName": "Rafael",
    "language": []
  }
]
所以,你可以用任何方式来做