在MongoDb集合中查找空对象属性

时间:2018-03-27 12:35:51

标签: mongodb

如何在MongoDb集合中查找文档属性或其子文档包含空对象值from sklearn.svm import SVC import numpy dataset = numpy.loadtxt("training.txt", delimiter="\t") X = dataset[:,0:15] y = dataset[:,15:16] y = y.ravel() test_dataset_1 = numpy.loadtxt("test_14-15.txt", delimiter="\t") X_test_1 = test_dataset_1[:,0:15] y_test_1 = dataset[:,15:16] y_test_1 = y_test_1.ravel() model = SVC(kernel='linear', C=75) model.fit(X, y) score_1 = model.score(X_test_1, y_test_1) 的所有文档? 该物业的名称未知。

应返回哪些文件的示例:

{}

正如{ data: { comment: {} } } data所说,属性名称未知。

1 个答案:

答案 0 :(得分:3)

在聚合管道中迭代对象属性的方法是$objectToArray运算符,它将文档转换为键值对的数组。不幸的是,它并没有压缩嵌入式文档。在实现此类支持之前,我没有看到使用纯聚合管道完成任务的方法。

但是,您始终可以使用$where运算符并将逻辑放入JavaScript代码中。它应递归迭代所有文档属性并检查该值是否为空文档。这是一个工作样本:

{ "_id" : 5, "p" : {  } }
{ "_id" : 7, "nestedDocument" : { "p1" : 1, "p2" : {  } } }
{ "_id" : 9, "nestedDocument" : { "deepDocument" : { "p" : {  } } } }

如果您使用以下数据填充集合:

$objectToArray

查询将正确检测具有空属性的所有文档:

db.collection.aggregate(
[
    { "$project": {
        _id: 1,
        "properties": { "$objectToArray": "$$ROOT" }
    }},

    { "$project": {
        _id: 1,
        propertyIsEmpty: { 
            $map: {
                input: "$properties.v",
                as: "value",
                in: { $eq: ["$$value", {} ] }
            }
        }
    }},

    { "$project": {
        _id: 1,
        anyPropertyIsEmpty: { $anyElementTrue: [ "$propertyIsEmpty" ] }
    }},

    {$match : {"anyPropertyIsEmpty" : true}},

    { "$project": {
        _id: 1,
    }},
]);

仅供参考,这是一个基于for song in MPMediaQuery.songs().items! { print(song.persistentID.description) print(song.title!) print(song.assetURL?.absoluteString ?? "") print(song.albumTitle ?? "Unknown") ... } 的聚合管道,它检测空属性,但不在嵌套文档中:

<%= form_for @job, url: {action: "create"} do |f| %>
  <%= f.text_field :something %>
  <%= f.submit "Make changes" %>
  <%= f.submit "Post Job" %>
<% end %>