MongoDB中insert into select写法
创建测试数据
use testdb
db.test_t.insertOne({_id:1,name:'zhangsan',age:30});
db.test_t.insertOne({_id:2,name:'lisi',age:33});
db.test_t.insertOne({_id:3,name:'wangwu',age:23});
db.test_t.insertOne({_id:4,name:'zhaoliu',age:26});
db.test_t.insertOne({_id:5,name:'sunqi',age:25});
db.test_t.insertOne({_id:6,name:'zhouba',age:23});
db.test_t.insertOne({_id:7,name:'wujiu',age:24});
db.test_t.insertOne({_id:8,name:'zhengshi',age:29});
方法1:使用 aggregate
和 insert
实现
语法:
db.sourceCollection.aggregate([
{ $match: { /* 查询条件 */ } }, // 查询条件,可以根据需要设置
{ $project: { /* 可选:选择需要的字段 */ } },
{ $merge: { into: "targetCollection" } } // 将查询结果插入到目标集合
])
解释:
aggregate()
:通过聚合管道查询sourceCollection
中的数据。$match
:你可以在这里定义查询条件(类似 SQL 中的WHERE
)。$project
:用来选择字段,类似于 SQL 中的SELECT
。$merge
:将查询结果插入到targetCollection
中,相当于 SQL 中的INSERT INTO
。
示例:
db.test_t.aggregate([
{ $match: {"_id": {$lte: 3}} }, // 获取_id小于等于3的文档
{ $merge: { into: "student" } } // 将数据插入到 student 中
])
注意:
$merge
在 MongoDB 4.2 及以上版本中可用。如果你使用的是较低版本的 MongoDB,可能需要先查询数据,然后通过应用逻辑(例如,使用insertMany
)将数据插入目标集合。$merge
会根据目标集合的不同配置(如whenMatched
和whenNotMatched
)对数据进行合并或者插入。你可以根据需要选择合适的选项。
方法2:先查询,再手动插入
// 查询数据
const data = db.sourceCollection.find({ /* 查询条件 */ }).toArray();
// 将查询到的数据插入到 targetCollection
db.targetCollection.insertMany(data);
示例
const data = db.test_t.find({ "_id": {$lte: 3} }).toArray();
db.student.insertMany(data);