私信  •  关注

mickl

mickl 最近创建的主题
mickl 最近回复了
4 年前
回复了 mickl 创建的主题 » 嵌套对象内的MongoDB查询

你得跑了 $objectToArray 扫描动态键。那你需要 $anyElementTrue 具有 $map Approved 价值:

db.collection.find(
    { 
        $expr: { 
            $anyElementTrue: { 
                $map: { 
                    input: { $objectToArray: "$approvals" },
                    in: { $ne: [ "$$this.v.status", "Approved" ] } 
                }
            } 
        }
})

Mongo Playground

4 年前
回复了 mickl 创建的主题 » 如何从github解析csv?

你必须使用 dataType 作为 text split 使用double for循环将数据获取为JS对象数组:

jQuery.ajax({
    url: "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv",
    type: 'get',
    dataType: 'text',
    success: function(data) {
        let lines = data.split('\n');
        let fields = lines[0].split(',');
        
        let output = [];
        
        for(let i = 1; i < lines.length; i++){
           let current = lines[i].split(',');
           let doc = {};
           for(let j = 0; j < fields.length; j++){
               doc[fields[j]] = current[j];
           }
           output.push(doc);
        }       
        
        console.log(output);
    },
    error: function(jqXHR, textStatus, errorThrow){
        console.log(textStatus);
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

MongoDB 4.2 Updates with Aggregation Pipeline ,请尝试:

db.users.updateMany({}, [ 
    { 
        $addFields: { 
            reputationHistory: { 
                $map: { 
                    input: "$reputationHistory",
                    in: {
                        $mergeObjects: [
                            "$$this",
                            { reason: { $cond: { if: { $eq: [ "$$this.isBid", true ] }, then: "Prediction", else: "Result" } } }
                        ]
                    }
                } 
            } 
        } 
    } 
])

如果你不能升级你可以使用的 $out

db.users.aggregate([ 
    { 
        $addFields: { 
            reputationHistory: { 
                $map: { 
                    input: "$reputationHistory",
                    in: { 
                        reason: { $cond: { if: { $eq: [ "$$this.isBid", true ] }, then: "Prediction", else: "Result" } },
                        isBid: "$$this.isBid",
                        isResult: "$$this.isResult"
                    }
                } 
            } 
        } 
    },
    {
        $out: "users"
    } 
])
4 年前
回复了 mickl 创建的主题 » 如何在MongoDB中从数组中提取对象

使用点符号指定条件:

db.users.updateOne(
    { _id: ObjectId("5cb18680aa024b2d441f93cc") },
    {
        $pull: {
            "friend_requests": {
                "user.id": ObjectId("5cb14fd7db537905c89e0a72")
            }
        }
    });
4 年前
回复了 mickl 创建的主题 » 这是在MongoDB中建立数据模型的正确方法吗?

这里有很多因素可以考虑。首先,您不需要认为每个“实体”都应该有一个单独的集合(如在SQL中),BSON可以处理如下嵌套数组:

{
    Id: cont_01,
    Name: "Thailand",
    ownedBy: userId101
    parentContainer: null,
    Photos: [ { id: "photo_01", "www.unsplash.com/1279178298" }]
}

“加入”( $lookup )MongoDB中的数据是一个额外的开销,所以除非您有充分的理由将其分成多个集合,否则请将其合并。

有了上面这样的数据模型,您就可以使用 $graphLookup 获取父子关系树。

这就是我要开始的。下一步,您可以考虑将用户数据嵌入到每个容器中(非规范化),以避免使用 $lookups user 包含嵌入的容器数组的文档 photos -更难维护(更新有点复杂,比如 here )但更好的阅读性能,因为你不需要查找。

拥有超大文档的缺点也是16MB的文档大小限制,这是一个很大的限制,但最好记住这一点。

5 年前
回复了 mickl 创建的主题 » 如何在MongoDB结果中使用字段值作为键名

你必须使用 $arrayToObject 如果要动态构建密钥。它需要一系列 k v 字段作为参数。让它成为你可以使用的根 $replaceRoot 阶段,尝试:

db.col.aggregate([
    {
        $replaceRoot: {
            newRoot: { $arrayToObject: [ [ { k: "$code", v: "$item" } ] ]}
        }
    }
])

你需要包括你的 eventId 签入查询的条件部分。因为你在用 findByIdAndUpdate 只能通过匹配的单个值 _id 作为条件。所以你必须使用 findOneAndUpdate 要指定自定义筛选条件,请尝试:

UserModel.findOneAndUpdate(
    { _id: userId, "portal.events.eventId": { $ne: req.body.eventId } },
    { $addToSet: { "portal.events": req.body } },
    { new: true }
);
4 年前
回复了 mickl 创建的主题 » 从MongoDB中的objectid获取所有文档和项目时间戳

你可以用 $toDate 操作人员

db.collection.aggregate([
    { $match: { "status": "active" } },
    { $project: { ts: { $toDate: "$_id" } }} 
])

Mongo Playground

5 年前
回复了 mickl 创建的主题 » mongodb:嵌套字符串的查询数组

Dot notation

db.collection.find({ "instock.type": "hello"})

MongoDB playground