gpt4 book ai didi

javascript - 在 MongoDB 中将简单的列表数组键迁移到另一个具有额外属性的键

转载 作者:行者123 更新时间:2023-11-30 16:35:41 25 4
gpt4 key购买 nike

抱歉,如果我没有正确使用术语。这是我目前拥有的 MongoDB 用户文档 db.users:

"liked" : [
"EBMKgrD4DjZxkxvfY",
"WJzAEF5EKB5aaHWC7",
"beNdpXhYLnKygD3yd",
"RHP3hngma9bhXJQ2g",
"vN7uZ2d6FSfzYJLmm",
"NaqAsFmMmnhqNbqbG",
"EqWEY3qkeJYQscuZJ",
"6wsrFW5pFdnQfoWMs",
"W4NmGXyha8kpnJ2bD",
"8x5NWZiwGq5NWDRZX",
"Qu8CSXveQxdYbyoTa",
"yLLccTvcnZ3D3phAs",
"Kk36iXMHwxXNmgufj",
"dRzdeFAK28aKg3gEX",
"27etCj4zbrKhFWzGS",
"Hk2YpqgwRM4QCgsLv",
"BJwYWumwkc8XhMMYn",
"5CeN95hYZNK5uzR9o"
],

我正在尝试将它们迁移到一个新 key ,该 key 还可以捕获用户喜欢该帖子的时间

"liked_time" : [
{
"postId" : "5CeN95hYZNK5uzR9o",
"likedAt" : ISODate("2015-09-23T08:05:51.957Z")
}
],

我想知道是否可以在 MongoDB Shell 中使用一个命令简单地执行此操作,该命令遍历每个用户文档,然后遍历喜欢的数组,然后更新并 $push 新的 postId 和时间。

或者在 JavaScript 中执行此操作会更好吗?我正在使用 Meteor。

我几乎让它适用于个人用户。但是想知道我是否可以一次处理所有用户。

var user = Meteor.users.findOne({username:"atestuser"});

var userLiked = user.liked;

userLiked.forEach(function(entry) {

Meteor.users.update({ username: "atestuser" },
{ $push: { liked_times: { postId: entry, likedAt: new Date() }}});

console.log(entry);
});

显然对 MongoDB 还是有点新手......

最佳答案

这是我做的非常快的东西,你应该在服务器端运行它,只需将它放入一个文件中,例如root meteor 中的“migrate.js”并运行 meteor 应用程序

if (Meteor.isServer) {
Meteor.startup(function () {
var users = Meteor.users.find().fetch();

users.forEach(function (doc) {
liked.forEach(function (postId) {
Meteor.users.update(doc._id, { $push: { liked_times: { postId: postId, likedAt: new Date() } } });
});
});
console.log('finished migrating');
});
}

p.s 我没有测试过

关于javascript - 在 MongoDB 中将简单的列表数组键迁移到另一个具有额外属性的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32734536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com